我试图从俄罗斯航运网站获取一些信息。作为JON / Jquery / Internets的n00b,我无法将数据转换为json格式。
按照公司的API,我转到网址: http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1
返回:
json({"rsp":{"stat":"ok","price":"750","term":{"min":5,"max":9}}})
按照Jquery的文档,我尝试过:
<script>$.getJSON("http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
function(data){
alert(data);
});</script>
返回null。知道我做错了吗?
答案 0 :(得分:5)
改为使用callback=?
,如下所示:
$.getJSON("http://emspost.ru/api/rest/?callback=?&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
function(data){
alert(data);
});
然后你将在警报中得到你的对象:) JSONP通过在查询字符串中获取该回调并调用该函数(不存在,除非你在它返回时发出function json() {}
来工作。 ?callback=?
jquery动态命名您为$.getJSON()
提供的success
函数并替换它,如下所示:?callback=FunctioNameGiven
,因此它实际上会正确运行。
如果你考虑它是如何运行的,那基本上就是:
<script type="text/javascript">
//returned javascript here, e.g. FunctioNameGiven({ object data });
</script>
这样做是因为它是一个GET请求,并且不受同源策略规则的限制,这就是JSONP在正常JSON请求被阻止的情况下的工作方式:)
答案 1 :(得分:1)
您正在使用回调函数(callback = json),该函数在加载时运行函数json
。
尝试更改GET:
http://emspost.ru/api/rest/?method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1
顺便问一下,你的请求是跨域吗?如果是这样,则不建议使用xhr。