2

我正在尝试从远程服务器调用 JSON 数据,但服务器不返回有效的 JSONP 格式数据,只返回有效的 JSON 数据。(与验证者确认)

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

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

4

3 回答 3

2

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

因此,您有两个选择:

  1. 正如人们所说,使用后端代理在服务器端发出请求。
  2. 如果您只需要支持一个浏览器(在我的情况下为 Chromium),请使用“ chromium-browser --disable-web-security ”之类的东西来禁用“same-origin-policy”规则。这将允许您发出跨域请求,但仅适用于这种非常特殊的情况。

祝你好运!

于 2011-05-08T14:40:51.763 回答
2

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

换一种方式想一想:如果我们可以从远程服务器获取 JSON,为什么会有 JSONP?:)

于 2010-11-23T17:58:51.940 回答
1

首先,如果您的服务器从中获取 JSON 不支持 JSONP,那么您将不得不使用代理。如果它确实支持 JSONP,您应该像下面的示例一样格式化您的请求。当您未在 $.getJSON(...&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/

于 2010-11-25T19:36:23.517 回答