为什么getJSON函数的回调没有执行?

时间:2013-06-22 09:06:40

标签: jquery jsonp

我发现jquery有 CORS

的解决方案

这是js文件中的代码:

   $.getJSON('http://localhost:8001/location?callback=?', function(data){
        console.log(data[]);
        console.log("anything");

    });

服务器json API:对于http://localhost:8001/location?callback=?请求,返回

({URL: '栏'})

问题是console.log()从未执行过,我在那里设置了断点,但浏览器并没有就此止步。

PS交叉domine请求成功,因为我可以看到响应json文件位于Web检查器的资源列表中

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

好吧,问题中提供的代码根本不会运行(它甚至不会发出请求),因为它有语法错误:

console.log(data[]);
// Here --------^^

但是我从你的说法中假设你已经看到了你必须在没有错误的情况下测试过的响应。

您的服务器响应不正确。你说过

  

服务器json API:对于http://localhost:8001/location?callback=?请求,返回

     

({url:'bar'})

...但这不是有效的JSONP响应(它也不是有效的JSON响应,有三种不同的方式)。要形成正确的JSONP响应,您必须使用在callback查询字符串参数中收到的函数名称来响应JavaScript函数调用。例如,如果callback__jquery456481345,则响应应为:

__jquery456481345({"url":"bar"})

关于JSON:我上面已经说过,({url:'bar'})在三种不同的方面不是有效的JSON响应。同样,在您的示例中,您使用的是JSONP(不同),但为了完整性,以下是JSON的问题:

  1. JSON文档无法以(开头,必须以{[开头。

  2. 在JSON中,属性名称(键)必须是双引号,例如"url": ...,而非url: ...

  3. 在JSON中,字符串必须是双引号,单引号无效,就像它们在JavaScript中一样。所以"bar",而不是'bar'