没有JSONP的getJSON远程请求 - 服务器

时间:2010-11-23 17:54:20

标签: json cross-domain jsonp getjson same-origin-policy

我正在尝试从远程服务器调用JSON数据,但服务器不会返回有效的JSONP表单数据,只返回有效的JSON数据。 (通过验证人确认)

如果我发出getJSON请求(使用& callback =?),我会返回有效的JSON,但它不会触发回调函数,因为它不是有效的JSONP。

有没有什么好方法可以访问返回的JSON数据?

3 个答案:

答案 0 :(得分:2)

不,它必须是JSONP数据,因为整个事情是如何工作的,它基本上包括一个JavaScript文件,通过创建一个<script>标签......并且该响应必须是有效的JavaScript,一个对象文字(本身)是无效的JavaScript。

另外想想:如果我们可以从远程服务器获取JSON,为什么JSONP会存在? :)

答案 1 :(得分:2)

是的,很糟糕。我对Viddler API(浏览器端)也有同样的问题。它正在发送JSON数据,但不是在脚本化的JSON-P接口中发送。

因此,您有两种选择:

  1. 正如人们所说,使用后端代理向服务器端发出请求。
  2. 如果您只需要支持一个浏览器(在我的情况下为Chromium),请使用“ chromium-browser --disable-web-security ”之类的内容来禁用“同源策略”规则。这将允许您进行跨域请求,但仅限于此特定情况。
  3. 祝你好运!

答案 2 :(得分:1)

首先,如果您的服务器获得JSON不支持JSONP,那么您将不得不使用代理。如果它确实支持JSONP,您应该格式化您的请求,就像下面的示例一样。当您未在$ .getJSON(...&amp; callback =?)中指定回调时,您的请求如下所示:

http://someurl?callback=123489234982
在它结尾处有一些荒谬的数字,它会让你的生活变得痛苦。因此,您应该指定一个回调并格式化您的代码,如下所示:

<script>
     $.getJSON("your url?callback=callbackName", ....);

     function callbackName { do what you want with the json in here }
</script>

如果这不起作用,那么你的服务器不支持JSONP :(这里是一个你可以使用的PHP代理的链接,这是非常好的,有很多文档。

http://benalman.com/projects/php-simple-proxy/