getJSON响应问题

时间:2011-09-22 20:57:19

标签: javascript jquery getjson

Chrome浏览器中的$ .getJSON响应存在问题

查询

$.getJSON("http://www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json?callback=?&points=55.77184,37.623553",
    function(json){
        <some code>
    }
);

如果点击此链接,您将获得一个json文本。

当我运行此查询时,Chrome会显示错误:

资源被解释为脚本,但使用MIME类型application / json

进行传输

SyntaxError:意外的令牌:timezone.json:1

它是否尝试将json响应转换为JavaScript对象?如果是这样,为什么它不能这样做?有没有办法解决这个问题?

Chrome调试器中的

我找到了包含以下内容的文件“timezone.json”:

{"code":0,"message":"ok","data":[{"timeZone":"Europe/Moscow","currentOffsetMs":14400000,"latitude":55.77184,"longitude":37.623553}]}

3 个答案:

答案 0 :(得分:3)

您请求数据的服务器未设置为返回JSONP。因此,您需要构建某种代理来为您获取数据,或使用YQL。

编辑:

如果你要使用YQL,这是你要使用的网址:

http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20json%20WHERE%20url%3D%22http%3A%2F%2Fwww.askgeo.com%2Fapi%2F428014%2Fsf2t36ujv1tsf325t5734gstr4%2Ftimezone.json%3Fpoints%3D55.77184%2C37.623553%22&format=json&diagnostics=true

有关我如何生成该网址的信息,请访问:

http://developer.yahoo.com/yql/console/#h=SELECT%20*%20FROM%20json%20WHERE%20url%3D%22http%3A//www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json%3Fpoints%3D55.77184%2C37.623553%22

您可以在底部找到网址。

使用YQL小提琴:http://jsfiddle.net/JGwU3/1/

然而,有一个使用YQL的怪癖。如果结果只包含一个结果,则它的内容是一个对象,但是,如果它是多个,则其内容将是一个数组。您可以通过console.logging响应来查看差异。

答案 1 :(得分:0)

修改

好的,我的帖子错了,这是一个JSONP问题。请参阅此jQuery文档页面,了解如何从URL检索数据: http://api.jquery.com/jQuery.ajax/

答案 2 :(得分:0)

在它所说的API documentation中,您应该在单独的JSON对象中提供查询参数作为第二个参数。

$.getJSON('http://www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json', {'callback':'', 'points': '55.77184,37.623553'}, function(json) {
  alert(json.data[0].timeZone);
});

我测试时工作正常。

(这完全忽略了JSONP)