【问题标题】:Jquery getJson not calling callbackJquery getJson没有调用回调
【发布时间】:2011-01-17 01:52:02
【问题描述】:

我有以下 javascript 代码:

$.get("categories/json_get_cities/" + stateId,  function(result)
        {            
            //code here
        }, 'json'
    );

处理它的 PHP 代码基本上输出如下内容:

function json_get_cities($stateId)
{
    //code here
    echo json_encode(array('cities'=>$cities));
}

在 firebug 控制台中,我可以看到 ajax 请求正在按预期发出,收到 200 OK 响应,并返回了一个包含城市的看似正确的 JSON 对象。但是由于某种原因,我传递给 jquery 的回调函数没有被调用。

甚至在函数顶部调用debugger,即

$.get("categories/json_get_cities/" + stateId,  function(result)
        {            
            debugger;
            //code here
        }, 'json'
    );

不起作用。但是,如果我删除 'json' 的第三个参数,然后调用该函数(但响应文本被视为纯文本而不是 JSON 对象)。

这是服务器返回的 JSON 响应:

{"cities":[{"id":"1613","stateId":"5","name":"Acton"}]}

有什么想法吗?

【问题讨论】:

  • 该死的。与您相同的问题,但使用的是最新的 Chrome。 Edge 很好,JSON 有效。

标签: javascript jquery ajax json


【解决方案1】:

您确认这是有效的 JSON 吗?在 jQuery 1.4 中,JSON 解析以严格的方式完成,任何格式错误的 JSON 都会被拒绝并抛出解析器错误。

在回调中尝试console.log(arguments)进行调试。

此外,您声明“json”是第四个参数,但它应该是第三个(如您的示例中所示)。

【讨论】:

  • 奇怪的是,当我输入console.log时它起作用了,一定是缓存问题
【解决方案2】:

使用这个确保 json 是有效的...

JSON Validator

【讨论】:

    【解决方案3】:

    调试这些 ajax 问题的另一种方法是使用 .ajax 方法,将 GET 作为方法类型传递,而不是 .get 方法。这将允许您在成功方法之外指定错误回调函数。

    【讨论】:

      【解决方案4】:

      请记住,在将 json 写入文件以供 jquery 加载时,JSON 字段名称必须用引号括起来,就像值一样。例如:

      在代码中:

      {
        name: "value"
      }
      

      在 JSON 文件中:

      {
        "name": "value"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2012-12-19
        • 2012-06-25
        • 1970-01-01
        • 2011-02-18
        • 2012-02-21
        相关资源
        最近更新 更多