2013-11-26 67 views
23

我目前正在研究一個純粹的HTML和JavaScript驅動的Web應用程序,它使用CORS消耗遠程Web服務,但目前在IE 11發出GET請求時遇到問題。有趣的是,我們已經在IE8/9/10中正常工作,而不僅僅是11.奇怪的AJAX錯誤與IE 11

問題是IE 11似乎超時而不是等待來自服務器的響應。 Ajax調用很簡單:

$.ajax(url, { 
    dataType: 'json', 
    complete: complete, 
    type: 'GET', 
    global: true, 
    success: success, 
    crossDomain: true, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

在網絡選項卡,並使用招我可以看到IE從來沒有發送請求。

有沒有人有任何想法嗎?

編輯:我忘了提及我已經試過cache:false。我還發現一些非常奇怪的事情,如果我將開發工具中的文檔模式從Edge切換到9,然後再次調用,即使在清除IE並重新啓動後,緩存是true還是false。非常奇怪。 :\

+0

你能否看到IE11是否存在飛行前OPTIONS請求的問題?你可以在服務器上記錄OPTIONS請求嗎? – Halcyon

+0

通過檢查ajax的哪個選項給你的問題進行調試 –

+0

我不知道這是否仍然是一個問題,但你有沒有檢查你的IE [安全區](http:// stackoverflow。com/questions/3362474/jquery-ajax-fails-in-ie-on-cross-domain-calls)允許CORS? – rockerest

回答

29

IE以緩存而聞名。確保你沒有得到一個緩存響應。您可以將cache屬性值設置爲false或將唯一時間戳添加到該url,以使其不會成爲緩存響應。您可以使用$.now()方法獲取唯一的時間戳。

設置緩存屬性

$.ajax(url, { 
    dataType: 'json', 
    cache : false, 
    //Other things ... 
} 

添加唯一時間戳URL

var url="somePage.php?"+$.now(); 
//Use this url now for making the ajax call 

$.now()方法是由表達式返回的數字速記(new Date).getTime()

+0

謝謝您的回覆。我嘗試添加時間戳,但沒有區別。 – Daveo

+0

@Daveo:你是否收到任何腳本錯誤?使用螢火蟲看看會發生什麼 – Shyju

+0

''.now()'之前應該有一個問號,否則網址會中斷。 – qwerty

5

我不知道,也許它的緩存,嘗試設置屬性「緩存:假」

否則,你也可以嘗試在您的網址的末尾添加一個日期,所以你必須每次一不同的網址和IE不會緩存

url +""+ (new Date()).getTime() 
2

如果您正在運行本地,請嘗試將crossDomain切換爲false。我花了相當多的時間來堅持這一點。 Chrome處理了crossDomain,但在IE中,如果您未使用crossDomain,並且已將其設置爲true,則它將自動失敗。

3

使用這個在你的頭標記

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1"> 
2

我知道這個線程是舊的,但只是爲那些遇到此問題的額外的檢查,檢查您的可信站點區域設置允許跨域訪問。 「雜項」下的第一個設置是您想要的設置。

將「跨數據源訪問數據源」設置爲「啓用」。