使用jQuery,为什么当通过Ajax返回JSON时不执行成功回调


With jQuery, why Success Callback isn't executed when a JSON is returned via Ajax?

我有以下PHP代码,它通过Ajax向客户端返回一个JSON对象。

function loadAll(){
    $knowledgeHandler = new KnowledgeLevelHandler();
    $json = $knowledgeHandler->loadAll();        
    header('Content-type: application/json');
    print $json;
}

我有一个测试函数分配给jQuery Ajax的成功回调。

successCallback = function(data){
    alert("A");
}
options = {    
    "data": data,
    "async": false,
    "type": "post",
    "success":successCallback        
}
$.ajax(url, options);

当我从 PHP 代码中删除header('Content-type: text/json');时,会执行回调,但在执行时,不会执行成功回调。怎么了?

我相信您需要在JQuery AJAX调用中将返回的数据类型指定为JSON。

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

json 类型将获取的数据文件解析为 JavaScript 对象,并且 返回构造的对象作为结果数据。

successCallback = function(data){
    alert("A");
}
options = {    
    data: data,
    async: false,
    type: "POST",
    success: "successCallback",
    dataType: "json"
}
$.ajax(url, options);

您的successCallback函数现在将包含一个数据对象,您可以通过该对象访问变量;data.var_1,data.some_other_var等。

尼尔

试着告诉jQuery你期待json回来。

options = {    
    "data": data,
    "async": false,
    "type": "post",
    "success":successCallback,
    "dataType": "json"       
}

您还可以添加错误回调,将 xhr、msg、代码作为参数,并输出这些回调以更好地了解问题所在。

试试这个:

options = {    
    "data": data,
    "async": false,
    "type": "post",
    "success":successCallback,        
    "dataType: "json"
}
$.ajax(url, options);