如何在JQuery中处理JSON数据,返回时头文件类型为"text/html"?

RLH*_*RLH 1 html jquery json getjson

我正在尝试使用jquery getJSON方法从公共API获取JSON数据.当我的getJSON请求的回调执行时,我不断收到以下错误.

警告:资源被解释为脚本,但使用MIME类型text/html进行传输

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

我已经检查了响应的标题,当然,它已设置为text\html.由于这是我无法控制的公共API,我如何轻松地请求和解析此JSON数据?

作为参考,下面的链接是我想要获取的JSON数据的链接.

JSON请求(http://bitcoincharts.com/t/weighted_prices.json)

Viv*_*ath 6

如果您无法控制mime类型,请使用jQuery.ajax而不是jQuery.getJSON.然后在成功回调中你可以做这样的事情:

jQuery.ajax({
    dataType: "text", //you may need this.
    success: function(data, textStatus, jqXHR) {
        var jsonData = JSON.parse(data);
        ....
    }
});
Run Code Online (Sandbox Code Playgroud)

你可以尝试的另一件事是:

jQuery.ajax({
    dataType: "json",
    success: function(data, textStatus, jqXHR) {
        //data here will be a JavaScript object
        ....
    }
});
Run Code Online (Sandbox Code Playgroud)

虽然我不确定如果mime类型不匹配,jQuery是否会抱怨.不过值得一试.

编辑:另一方面,您如何从脚本中访问该数据?即使它是一个公共API,它也在另一台服务器上,因此会违反同源策略.当我执行以下操作时:

jQuery.getJSON("http://bitcoincharts.com/t/weighted_prices.json", function(data) {
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

在我的Chrome控制台中,我看到以下错误:

XMLHttpRequest cannot load http://bitcoincharts.com/t/weighted_prices.json?_=1346263039525. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

您必须查看BitCoin Charts是否支持JSONP替代方案.否则,你唯一的选择是建立在服务器端,抓住这个数据,你用正确的mime-type返回回给你的JSON的东西.