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

问题描述:

我想从远程服务器调用JSON数据,但服务器不返回有效的JSONP形成的数据,只有有效的JSON数据。 (验证器确认)没有JSONP的getJSON远程请求 - 服务器

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

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

+0

您是否在控制远程服务器?您是否无法通过服务器脚本调用远程服务器? – Philar 2010-11-23 18:06:22

+0

如果您还可以请提及远程服务器的网址 – Philar 2010-11-23 18:07:29

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

想想另一种方式:如果我们可能从从远程服务器获取JSON,为什么JSONP存在? :)

那么首先,如果您的服务器获取JSON不支持JSONP,那么您将不得不使用代理。如果它确实支持JSONP,则应该像下面的示例那样格式化您的请求。当你不指定在$ .getJSON回调(?...... &回调=),那么你的要求是这样的:

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/

是的,它吸收。我在与Viddler API(浏览器端)相同的问题。它发送JSON数据传回,但不是在脚本JSON -P接口。

因此,你有两个操作tions:

  1. 正如人们所说的,使用后端代理来请求服务器端。
  2. 如果您只需要支持一个浏览器(我的情况为Chromium),请使用类似“chromium-browser --disable-web-security”的内容来禁用“same-origin-policy”规则。这将允许您提出跨域请求,但仅限于此特定情况。

祝你好运!