2013-10-17 64 views
1

我有一個PHP函數應該返回一個JSON對象到一個AJAX調用,但它是返回一個字符串。這是我從AJAX調用中調用的PHP。PHP沒有正確返回一個AJAX調用的JSON

<?php 
    echo json_encode(array("error", 0, "Success!")); 
?> 

這是AJAX調用。

$.ajax({ 
     type: "POST", 
     url: "../api/login.php", 
     data: { id: username, password: password }, 
     success: function(response) { 
      alert("Data Saved: " + response); 
      $("#login_username").val(""); 
      $("#login_password").val(""); 
     } 
     }); 

當這個函數返回時,我嘗試訪問控制檯響應,這是什麼情況

response 
> "["error",0,"Success!"]" 
response[0] 
> "[" 

回答

2

您的實現似乎使用jQuery或jQuery的一些實物模型。如果它不使用jQuery,我會很樂意爲您的問題分享更多解決方案。

添加的dataType

$.ajax({ 
     dataType: 'json', 
     type: "POST", 
     url: "../api/login.php", 
     data: { id: username, password: password }, 
     success: function(response) { 
      alert("Data Saved: " + response); 
      $("#login_username").val(""); 
      $("#login_password").val(""); 
     } 
     }); 

的問題是,默認情況下,jQuery的需要一個字符串。

var foo = "bar"; 
foo[1] === "a"; // true 

文檔:jQuery.ajax

4

如果你期待的對象,然後指定要在阿賈克斯設置dataType:json。它還將確保如果從服務器發送任何無效的JSON,則會出現解析錯誤。很可能你沒有在響應頭文件中指定的內容類型(application/json; charset=utf-8),它允許jquery自己確定MIME類型,所以指定dataType確保你得到一個對象或返回一個錯誤(包含無效的JSON)。

$.ajax({ 
    type: "POST", 
    dataType:'json' 
    url: "../api/login.php", 
    data: { id: username, password: password }, 
    success: function(response) { 
     alert("Data Saved: " + response); 
     $("#login_username").val(""); 
     $("#login_password").val(""); 
    } 
    }); 
+1

可替代地,設置了響應正確的內容類型(例如'報頭( '內容類型:應用/ JSON')' )和jQuery會自動採用這種方式 – Phil

+0

@Phil true ...我認爲OP沒有正確設置它.. – PSL

1

在AjaxCall的添加PARAM

$.ajax({ 
    type: "POST", 
    url: "../api/login.php", 
    data: { id: username, password: password }, 

    dataType: "json" //-< add this param. 

    success: function(response) { 
     alert("Data Saved: " + response); 
     $("#login_username").val(""); 
     $("#login_password").val(""); 
    } 
    }); 

http://api.jquery.com/jQuery.post/