2010-06-26 72 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