2010-08-21 65 views
22

我知道,如果我自己的網頁,如果我的用戶是: http://www.example.com/form.php
同源策略 - AJAX及使用公共API

和我做從該頁面的Ajax請求: http://example.com/responder.php

由於相同的來源策略(子域不同),它會失敗。

我想知道的是,當請求和服務器明顯不同時,AJAX請求是如何從API的flickr中提取數據的呢?


編輯:

如:爲什麼這段代碼的工作?

$.getJSON('http://api.flickr.com/services/rest/?&;method=flickr...' 

Referred this Community Wiki) 是否使用Cross Origin Resource Sharing

謝謝!

回答

17

很少有已知的解決同源策略的方法。一種流行的技術是使用「Script Tag Injection」,如JSONP。由於<script>標記不受同源策略的限制,因此第三方域上的腳本可以提供與提供的回調函數交互的可執行代碼。您可能需要在下面的文章中的「提示和技巧」部分退房有關該主題的進一步閱讀:

您還可能有興趣在檢查出下面的堆棧溢出職位上的其他技術進一步閱讀來解決同源策略:


UPDATE:進一步更新的問題:

從jQuery的文檔上$.getJSON()引用: 「回調=」

如果URL中包含字符串在URL中,請求被視爲JSONP。

+0

這並不是說元素不受同源策略的限制,因爲JavaScript無法訪問返回的原始數據。這取決於第三方提供的可執行代碼與您提供的功能進行交互。 – Quentin 2010-08-21 07:48:52

+1

@David:謝謝。更新我的答案是更準確:) – 2010-08-21 08:14:41

+1

aha!該死的,jQuery做所有這些技巧在後臺處理它! :) NEAT!愛jQuery ---參考:http://insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html – DMin 2010-08-21 08:26:48