这是有效的JSON标记吗?

时间:2010-06-26 17:27:45

标签: jquery json api

我试图从俄罗斯航运网站获取一些信息。作为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。知道我做错了吗?

2 个答案:

答案 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。