2011-09-22 48 views
2

我有一些問題,在Chrome問題與響應的getJSON

$ .getJSON響應

查詢是

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

,如果你點擊這個鏈接,你會得到一個JSON文本上。

通過當我運行此查詢鉻示出了一個錯誤:

資源解釋爲腳本但與MIME類型application/JSON轉移

語法錯誤:意外標記:timezone.json:1

它嘗試將json響應轉換爲JavaScript對象嗎?如果這是爲什麼它不能做到這一點?有沒有解決這個問題的方法?

在Chrome調試器,我發現文件 「timezone.json」 與此內容:

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

你有沒有理由把URL包裝在括號中並在末尾加上'[1]'? –

+0

我還沒有看到像這樣在'getJSON'調用中使用的括號;那是什麼? –

+0

什麼是url的方括號? – galchen

回答

0

編輯

OK,我的職務是錯誤的,這是一個JSONP的問題。請參閱此jQuery文檔頁面,瞭解如何從URL中檢索數據: http://api.jquery.com/jQuery.ajax/

+0

括號來自使用在stackoverflow上的降價編輯器。應該是一個錯字 –

+0

嗯,我不這麼認爲 - 我認爲這是一個JSONP問題。 –

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 

以及我如何生成的URL,瀏覽信息:

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這個響應來看到不同之處。

+0

這非常有幫助,謝謝 – Cvisto

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)

+0

不會被相同來源的問題困擾嗎? –

+0

是的,當然,它已經在我的開發機器上關閉了,並沒有考慮到它。對不起,把它混合起來,沒有意識到?自從我寫這篇文章後,回調就在那裏 – klaustopher