JSON使用JQuery获取请求(跨域)

我正在尝试向我无法控制的域上的API发出简单的JSON get请求。

我的代码很简单:

$(document).ready(function () { $.ajax({ type: 'GET', url: 'http://pubapi.cryptsy.com/api.php?method=marketdatav2', success: function (data) { console.log(data); } }); }); 

但由于这是跨域请求,因此我在Chrome控制台中收到此错误:

XMLHttpRequest cannot load http://pubapi.cryptsy.com/api.php?method=marketdatav2. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.

当我尝试添加参数dataType: 'jsonp' ,Console将返回此错误:

未捕获的SyntaxError:意外的令牌:

但是当我检查Chrome中的网络选项卡时,我看到在Headers下,状态代码是200 OK,我可以在Response选项卡中看到完整的响应,但是控制台仍然显示“Unexpected Token:”错误和JQuery JSON请求仍然失败。

这是JS Fiddle链接: http : //jsfiddle.net/6Qcq2/您可以看到相同的结果

我试过在http://www.hurl.it上运行url,它显示状态OK和响应,所以我一定做错了。

我整天都在试图弄清楚如何解决这个问题。

非常感激您的帮忙。

API的响应是JSON,而不是JSONP,因此仅更改数据类型无济于事。

您可以使用发出请求的代理并将JSON转换为JSONP:

 $(document).ready(function () { $.ajax({ type: 'GET', url: 'http://jsonp.guffa.com/Proxy.ashx?url=pubapi.cryptsy.com%2fapi.php%3fmethod=marketdatav2', dataType: 'jsonp', success: function (data) { console.log(data); } }); }); 

演示: http : //jsfiddle.net/6Qcq2/1/

您需要设置某种类型的代理脚本。 由于Same-origin策略 ,您无法对外部域上的资源进行ajax调用。 您可以通过设置一个简单的PHP脚本来解决这个问题,该脚本将为您查询数据。 然后,您可以将ajax调用指向您的脚本(将在您的域上托管)。 该资源的内容类型是application / json,所以告诉jQuery类型是jsonp对你没有帮助。

出于安全原因,AJAX请求不能跨域工作。 由于您正在阅读JSON数据,因此您可以使JSONP工作。

jsonp响应不应该直接回调吗?

什么是JSONP?