2010-02-15 55 views
4

我有以下的javascript代码:的Jquery的getJSON不调用回调

$.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"}]} 

有什么想法?

+0

该死。与你同样的问题,但与最新的Chrome。边缘很好,JSON是有效的。 – MSC 2016-08-31 10:50:57

回答

10

您是否确认这是有效的JSON?在jQuery 1.4中,JSON解析是以严格的方式完成的,任何格式不正确的JSON都会被拒绝并引发parsererror。

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

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

+0

奇怪的是,它工作时,我把console.log,一定是一个缓存问题 – 2010-02-15 17:19:45

3

另一种方法来调试其中的一些AJAX的问题是使用阿贾克斯方法,通过GET作为方法类型,而不是.get方法。这将允许您指定除成功方法外的错误回调函数。

1

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

在代码:

{ 
    name: "value" 
} 

在JSON文件:

{ 
    "name": "value" 
}