2012-09-19 75 views
1

沒有響應頭我注意到,與IE8和IE9,如果我把我的使用jQuery.ajax()的RESTful API與POSTPUT動詞,那麼我不會在jqXHR中收回任何響應標頭。但是,GET請求按預期工作。jQuery.ajax與POST或PUT對IE8和IE9

此行爲與所有其他瀏覽器不同。我已經驗證過,Chrome,FF,Opera和Safari都會在POST和PUT請求的響應中返回全部預期的標題。只有IE8和IE9似乎將標題放在地板上。 (有一件事我沒有檢查是什麼與頭部請求。)

我已經驗證與提琴手頭實際上是通過電線,所以問題是要麼與jQuery本身或與IE8和IE9。

這是一個已知的問題?如果是這樣,是否有解決方法。我可以重載/覆蓋jQuery中的某些內容以便在POST和PUT之後保留標題嗎?我目前的解決方法是簡單地在成功回調中使用GET重新獲取修改後的數據,因爲IE8和IE9不會混淆GET操作的標頭。

這裏是我的主要基於jQuery的AJAX輔助方法的一個片段:

$.ajax({ 
     url: String.format(um.proxy.url, url), 
     type: ajaxParams.verb, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: String.format('{0}', ajaxParams.jsonData), 
     headers: mapOfHeaders, 
     success: function (data, textStatus, jqXHR) { 
      //... 
     }, 
     error: function (msg, textStatus, errorThrown) { 
      //... 
     } 
    }); 

回答

5

原來,這是一個公知的問題與IE的所有當前香精(7,8,和9)。如果響應代碼是,那麼IE只會將所有標題放在地板上。對於像我這樣的人來說,編寫純粹的AJAX實現需要使用最新的eTag來進行併發檢查,IE則支持純粹的AJAX方法,並迫使我立即執行GET來獲取當前的eTag。 :捂臉:

這裏有一對夫婦的文章中,我設法挖了起來:

ETag頭在HTTP缺少在Internet Explorer中無內容迴應

http://dalelane.co.uk/blog/?p=2043

response.headers。 ETag undefined

http://datajs.codeplex.com/discussions/398295

一個部分的解決方法是嗅探IE,然後立即執行HEAD請求來獲取ETag,但這種方法的問題是,如果有人設法在你前面潛行並更新記錄,你會獲得eTag 的變化,而不是你的。所以這不是一個可接受的解決方法。

因此,我嗅探IE瀏覽器並立即進行GET。否則,對於所有其他瀏覽器,我只需使用jQuery的jqXHR.getResponseHeader(namespace.constants.headers.eTag)來獲取eTag。

0

如果您的REST服務是不同的服務器,你是從,你可能想看看這篇文章,要求應用程序上。接受的答案解釋了爲什麼您需要使用JSONP內容類型。

jQuery ajax call to REST service

+0

我實際上使用我自己的C#代理充當中間人,因爲REST服務位於不同的域上。但是,這個答案與我的問題是正交的。 JSONP不是一個選項,因爲JSONP只適用於GET請求。而且,問題是隻有IE8和IE9纔會出現這種行爲。所有其他主流瀏覽器按預期工作。 –