【问题标题】:With jQuery, why Success Callback isn't executed when a JSON is returned via Ajax?使用 jQuery,为什么通过 Ajax 返回 JSON 时不执行 Success Callback?
【发布时间】:2012-05-15 21:23:55
【问题描述】:

我有以下 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'); 时,回调被执行,但是当它被执行时,成功回调没有被执行。怎么了?

【问题讨论】:

  • 您使用同步请求是否有特定原因?也许尝试异步?
  • 我通常不设置标题类型,我只是回显字符串,例如echo json_encode(array("success"=>true));

标签: php jquery ajax json callback


【解决方案1】:

我相信您需要在 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 等

尼尔

【讨论】:

    【解决方案2】:

    尝试告诉 jQuery 你期待 json 返回。

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

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

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 2015-02-07
        • 1970-01-01
        • 2021-02-17
        • 2015-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多