小编典典

使用JQuery的JSON Get请求(跨域)

ajax

我正在尝试向不受控制的域上的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',控制台将返回此错误:

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

但是,当我检查Chrome中的“网络”标签时,我看到“标题”下的状态代码为200
OK,实际上我可以在“响应”标签中看到完整的响应,但控制台仍显示“意外令牌:”错误和JQuery JSON请求仍然失败。

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

我尝试在http://www.hurl.it上运行该url ,它向我显示Status
OK(正常)和响应,因此我必须做错了什么。

我整天都在浪费精力,试图弄清楚如何解决这个问题。

非常感激你的帮助。


阅读 200

收藏
2020-07-26

共1个答案

小编典典

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/

2020-07-26