我想寫一個JavaScript應用程序,它從openstreetmap API(http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.6)加載數據,它基本上只是一個安靜的xml api。我試圖使用jquery來訪問XMl。但是我得到安全錯誤。這是一個跨站點腳本阻止。javascript - 想用ajax訪問另一個域的內容?
如何訪問該XML? AFAIK OSM不提供jsonp,所以這是行不通的。是否有嗎?>
我想寫一個JavaScript應用程序,它從openstreetmap API(http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.6)加載數據,它基本上只是一個安靜的xml api。我試圖使用jquery來訪問XMl。但是我得到安全錯誤。這是一個跨站點腳本阻止。javascript - 想用ajax訪問另一個域的內容?
如何訪問該XML? AFAIK OSM不提供jsonp,所以這是行不通的。是否有嗎?>
丹鏈接的博客文章將向您展示如何解決這個問題,但這裏的背景:
,你可以做一個跨域JavaScript調用從一個網頁是通過JSONP的唯一途徑。如果您沒有提供JSONP,那麼您將不得不訴諸使用代理腳本,因爲瀏覽器有目的地阻止站點腳本進行此類調用。
請注意,如果您正在編寫Firefox擴展程序,那麼您將在特權空間中執行,因此可以不受限制地進行此類跨域調用。
兩種方式來繞過跨站點腳本是建立一個服務器端代理來調用您的腳本調用您的服務器端代理的URL。另一種方法是使用腳本標記調用數據,該標記對跨站點調用沒有限制。
OpenStreetMap的Nominatim API現在支持JSONP,因此您可以純粹使用客戶端代碼獲取數據,而無需在您自己的服務器上額外添加任何內容。這裏有一個jsfiddle示例 - 如果你可以在jsfiddle中做到這一點,你可以在任何地方做到這一點。
有關如何從其他域訪問API的更一般問題,以下是我在涉及部分完整且常常相互矛盾的答案時通過反覆試驗學到的一些有用信息。如果有任何內容或變得不準確,請編輯或評論。
json_callback
,jQuery的默認callback
將只在偶然的情況下工作,這是API編程監聽?
的URL(例如,如果它是json_callback
,則someurl.com/api?json_callback=?
)。 jQuery會計算出這是什麼,將?
換成像jQuery1712164863864387412
這樣的字符串,用相同的字符串命名內聯函數,並等待接收一些通過名稱觸發該函數的代碼並將其傳遞給JSON。
parseerror jQuery17109935275333671539_1300495251986 was not called
的錯誤,這意味着jQuery具有名爲ready,waiting的函數,但API沒有使用該字符串來包裝JSON,所以功能不叫 - 可能你沒有使用正確的參數名稱someFunction({"some": "argument"});
,錯誤處理是有限的(但如果你使用完整的$.ajax
語法而不是剝離下來的$.getJSON
快捷方式,請參閱jQuery提供的jsfiddle)<script>
)。希望這會幫助別人!
...這裏是相同的jsfiddle,但使用$ .getJSON()語法而不是$ .ajax()爲任何人想看到不同之處http://jsfiddle.net/KyLza/3/ – user568458 2012-03-05 17:38:30
請問[本博客](http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html)發佈幫助嗎? – 2009-07-19 16:15:44