0

我发现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:'bar'})

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

PS 跨域请求成功,因为我可以看到响应的 json 文件在 web 检查器的资源列表中

任何想法?

4

1 回答 1

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(这是不同的),但只是为了完整起见,以下是 JSONP 的问题:

  1. JSON 文档不能以 开头(,它必须以{or开头[

  2. 在 JSON 中,属性名称(键)必须用双引号括起来,例如"url": ...,not url: ...

  3. 在 JSON 中,字符串必须使用双引号,单引号不像在 JavaScript 中那样有效。所以"bar",不是'bar'

于 2013-06-22T09:11:21.753 回答