2010-06-26 69 views
3

我正在尝试从俄罗斯航运网站获取一些信息。作为一个J00/JQuery /互联网n00b我坚持让数据转换成json格式。这是有效的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

请参见http://计算器。 com/questions/3113924/jquery-jsonp-yahoo-query-language/3114367#3114367 – Anurag 2010-06-26 17:34:50

回答

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() {}当它返回当你这样做的jQuery ?callback=?动态success功能你给$.getJSON()是和替换它,像这样的名字:?callback=FunctioNameGiven,所以它实际上会正常运行

如果你仔细想想如何。运行,它基本上:

<script type="text/javascript"> 
    //returned javascript here, e.g. FunctioNameGiven({ object data }); 
</script> 

这样做所以这是一个GET请求,而不是通过同源策略规则的限制,这是JSONP是如何工作的,其中一个正常的JSON请求被阻塞:)

+0

我想补充一点,'?'标记需要在jQuery中触发JSONP支持......如果省略,jQuery将不会知道它是JSONP,并且会尝试将数据作为正常的JSON请求读取,这是行不通的。 – chakrit 2010-06-26 17:50:20

+0

@chakrit - 好点,我会加上一个警告,虽然这对'$ .getJSON()'是正确的,但不是总体jQuery(尽管它是最简单的路线),例如:http://jsfiddle.net/ jF6yj / – 2010-06-26 17:56:45