Jquery的getJson方法没有调用回调函数

5

我有以下的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 对象)。

以下是服务器返回的 JSON 响应:

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

任何想法?

该死。和你一样的问题,但使用最新的Chrome浏览器。Edge浏览器没问题,而且JSON格式正确。 - MSC
4个回答

11

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

尝试在回调函数中使用console.log(arguments)进行调试。

此外,你声明'json'是第四个参数,但它应该是第三个(与你的示例一样)。


很奇怪,当我加入console.log时它就起作用了,可能是缓存问题。 - Ali

8

3

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


1

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

在代码中:

{
  name: "value"
}

在 JSON 文件中:

{
  "name": "value"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接