1

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

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

错误:未捕获的语法错误:意外的令牌:

我检查了响应的标头,果然,它设置为text\html. 由于这是一个我无法控制的公共 API,我怎样才能轻松地请求和解析这个 JSON 数据?

作为参考,下面的链接是我试图获取的 JSON 数据的链接。

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

4

1 回答 1

6

如果您无法控制 mime 类型,请使用jQuery.ajax代替jQuery.getJSON. 然后在成功回调中,您可以执行以下操作:

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

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

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

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

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

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

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

XMLHttpRequest cannot load http://bitcoincharts.com/t/weighted_prices.json?_=1346263039525. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.

您必须查看比特币图表是否支持 JSONP 替代方案。否则,您唯一的选择是在服务器端设置一些东西,为您获取此数据并使用正确的 mime 类型以 JSON 格式将其返回给您。

于 2012-08-29T17:32:20.020 回答