我正在尝试向不受控制的域上的API发出一个简单的JSON获取请求。
我的代码很简单:
$(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',控制台将返回此错误:
dataType: 'jsonp'
未捕获到的SyntaxError:意外令牌:
但是,当我检查Chrome中的“网络”标签时,我看到“标题”下的状态代码为200 OK,实际上我可以在“响应”标签中看到完整的响应,但控制台仍显示“意外令牌:”错误和JQuery JSON请求仍然失败。
这是JS Fiddle链接:http : //jsfiddle.net/6Qcq2/您可以看到相同的结果
我尝试在http://www.hurl.it上运行该url ,它向我显示Status 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/