爲什麼如果您在不同的服務器上使用URL,jQuery.ajax()會拋出一個沒有錯誤信息的錯誤?當url來自不同的服務器時,jQuery.ajax失敗
回答
其因爲在瀏覽器中實現XMLHttpRequest的跨域請求的限制。您可以通過使用JSONP作爲格式來解決這個問題,否則您需要服務器端代理來處理請求。
從ajax documentation上http://jquery.com
注引用:所有的遠程(不在同 域)的請求應指定 爲GET時,「腳本」或「JSONP」是 的數據類型(因爲它使用DOM腳本標記加載腳本 )。需要XMLHttpRequest對象 的Ajax選項 不適用於這些請求。 完成調用完成併成功的函數爲 ,但不要求 接收XHR對象;調用前發送的 和dataFilter函數不是 。
ajax()方法在內部使用遵從相同域策略http://en.wikipedia.org/wiki/Same_origin_policy的XmlHttpRequest。 可以使用getJson()方法來進行跨域調用。
我希望這有助於 波格丹
因爲如果同源策略jQuery將不允許這樣做。最好的選擇將使用一些代理服務器頁面來獲取所需的頁面。
由於http://en.wikipedia.org/wiki/Cross-origin_resource_sharing說:
跨源資源共享(CORS)是一種機制,允許網頁製作的XMLHttpRequest到另一個域。 1根據相同的原產地安全策略,這種「跨域」請求否則會被網頁瀏覽器禁止。 CORS定義了瀏覽器和服務器可以交互的方式,以確定是否允許跨源請求。 2它比只允許同源請求更強大,但它比簡單地允許所有這樣的跨源請求更安全。
對於PHP它使用header()函數完成:
<?php
header("Access-Control-Allow-Origin: http://example.com");
?>
CORS可以用作現代替代JSONP圖案。雖然 JSONP僅支持GET請求方法,CORS也支持其他 類型的HTTP請求。使用CORS使Web程序員可以使用常規的XMLHttpRequest,它支持比JSONP更好的錯誤處理。另一方面,JSONP在傳統瀏覽器上工作,其中 排除了CORS支持。CORS由大多數現代Web瀏覽器支持。 此外,雖然JSONP可能會導致外部網站被盜用的XSS問題,但CORS允許網站手動解析對 的響應,以確保安全。
JSONP或「帶填充的JSON」是在JavaScript中使用的一種通信技術,用於 JavaScript。它提供了一種方法來請求來自不同域中的服務器的數據,這是典型Web瀏覽器所禁止的,因爲相同來源策略的 。
這個jQuery插件會做一個基本的跨起源request.It不AJAX.But作品非常相似如AJAX
- 1. Apache http服務器重寫URL失敗
- 2. 來自服務器的Ruby POST調用失敗
- 3. 不同的URL /同一服務器
- 4. 如何檢查來自同一服務器或不同服務器的請求?
- 5. .NET 4.7失敗時服務器TLS 1.1
- 6. jQuery.ajax()成功/失敗時調用回調?
- 7. jquery.ajax何時運行失敗回調?
- 8. 當我開始網格搜索時,h2o服務器失敗
- 9. 當emacs嘗試連接到ipython/jupyter服務器時ein失敗
- 10. 當從tsql/freetds連接sql-azure時,服務器連接失敗
- 11. 服務器級聯失敗
- 12. .htaccess URL重寫失敗 - 在此服務器上找不到請求的URL
- 13. 爲來自同一服務器的不同域設置會話?
- 14. 返回來自不同服務器的相同響應
- 15. 綁定來自不同APK的服務
- 16. 來自OPC服務器的c#實時圖表/圖形來自OPC服務器
- 17. NGNIX Nextcloud的後向代理服務器URL重定向失敗
- 18. 使一個WCF服務接受來自jQuery.AJAX的JSON數據()
- 19. 來自不同URL的不同登錄
- 20. 無法自動進入服務器。連接服務器機器「abc」失敗
- 21. 來自JQuery的Web服務調用失敗
- 22. 當傳輸到服務器場中的不同服務器時,IsPostBack爲false?
- 23. 當服務器和請求是本地服務器時,偵聽SMTP工作,但是如果從遠程服務器請求失敗,則它會失敗
- 24. 來自ggmap的地理編碼在閃亮的服務器上失敗
- 25. WCF,處理來自多個服務器的同時請求
- 26. 連接來自不同服務器的socket.io的錯誤
- 27. 回到失敗的服務器
- 28. XULRunner下的javascript服務器失敗
- 29. 爲什麼parseJSON在來自服務器的以下響應中失敗?
- 30. 的NuGet推失敗,417(預期失敗)從遠程服務器
如果接入服務提供服務器端處理,那麼爲什麼jQuery的連需要處理對另一個域的調用,它只會在服務器端代碼中處理,並傳遞給頁面。 – stephenbayer 2012-07-02 18:40:57