2012-04-11 143 views
6

這是一種跨域問題,但問題是瀏覽器(Chrome)似乎沒有遵循重定向。相反,沒有任何東西返回給jQuery ajax調用,並且出現錯誤。jQuery ajax調用域重定向到另一個域(不遵循)

我試圖使用jQuery.ajax,但我使用的URL重定向到了另一個域。發生這種情況時,出現錯誤。是否有什麼特別的事情需要完成,以便瀏覽器遵循重定向?

我已將access-control-allow-origin: *添加到正被重定向到的第二個域的標頭。

+0

你可以添加你的代碼,你看到的錯誤? – 2012-04-11 20:48:02

+0

您不允許從您的ajax中的其他域獲取數據。 – 2012-04-11 20:48:21

回答

0

獲得跨域ajax調用的唯一方法是使用jsonp。

在jQuery中,將您的.ajax() dataType設置爲'jsonp'。看到這裏:http://api.jquery.com/jQuery.ajax/

如果服務器被重定向到不能夠jsonp響應,它仍然可能無法正常工作。 json響應和jsonp響應之間的區別在於,json響應是純json字符串,而jsonp響應是調用傳遞json字符串的函數的代碼。

一個不太寒酸教程:http://remysharp.com/2007/10/08/what-is-jsonp/

商量好了:Can anyone explain what JSONP is, in layman terms?

+2

跨域AJAX調用可能與跨源資源共享(CORS)和作者一起使用該技術(正如他提到的「access-control-allow-origin:*」頭部)。 – vadimk 2012-09-09 22:13:51

+0

@vadimk,也許你可以提供一個答案然後涉及這種方法。但從帖子看來,問題出在客戶端。 CORS的'access-control-allow-origin'方法在服務器端。即使服務器允許,客戶端也不允許。因此JSONP。 – 2012-09-11 12:52:24

+0

喬納森,看看我的答案。解決方案涉及確保重定向頁面具有正確的響應標頭。 – BigMacAttack 2013-09-14 23:32:41

1

HTTP重定向頁面會被視爲在於其還需要接入控制頭部的任何其他HTTP頁面。如果您的重定向頁面沒有這些頁面,那麼瀏覽器將永遠無法檢查被重定向到的頁面是否具有適當的權限。

隨着重定向頁面上的Location頭,還添加了Access-Control-Allow-Origin頭及其相關成分(即Access-Control-Allow-Methods等)

+2

在你的答案中有很多理論..幾行代碼來說明你說的話不會傷害 – abbood 2014-04-22 05:44:46

相關問題