2013-06-22 74 views
0

我发现,jQuery有用于CORS为什么getJSON函数的回调没有执行?

这里的解决方案是在js文件的代码:

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

    }); 

服务器JSON API:为http://localhost:8001/location?callback=?请求,返回

(网址:{url :'bar'})

问题是console.log()从来没有执行过,我把断点放在那里,但浏览器并没有停在那里。

PS十字圣主的要求是成功的,因为我可以看到响应JSON文件是在Web检查

任何想法的资源列表?

+0

响应应该封装在函数内部。函数名称应该与回调名称相同。 –

+0

@SubirKumarSao:不,jQuery处理这个管道。 jQuery定义函数,接收回调,然后调用成功函数。 –

+0

*“我发现jquery有CORS的解决方案”*虽然JSONP是一般意义上的跨源资源共享,但我会避免将其称为CORS,因为这很容易被误读为相当不同的[跨源资源共享]( http://www.w3.org/TR/access-control/)技术。 –

回答

3

那么,在这个问题不会在所有(它甚至不会发出请求)运行时出现,因为它有一个语法错误代码:

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

但我从你的说法假设你已经看到了你在某个时刻必须经过测试而没有发现错误的反应。

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

the server json API: for the http://localhost:8001/location?callback=? request, return

({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'