2012-04-06 81 views
14

我使用ajax請求(POST方法)提交表單,並檢查響應中的HTTP狀態代碼以查看它是否成功。MSIE爲Ajax請求返回狀態碼1223

它在Firefox上正常工作,但當然不在MSIE-8上。提交實際上工作正常,我可以檢查我的服務器並確認提交工作正常,服務器響應的狀態碼爲204.同樣,firefox正確地向我提供了請求對象的狀態碼204,但IE給出了狀態碼1223.

任何想法如何在MSIE中獲得準確的狀態碼?下面是提交表單並檢查響應的代碼。 (在Windows XP SP3 +在 至少IE 8.0)在MSXML HTTP

var req = new XMLHttpRequest(); 
    req.open("POST", "p.php?i=" + self.__isid, true); 
    //Send the proper header information along with the request 
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    req.setRequestHeader("Content-length", formdata.length); 
    req.setRequestHeader("Connection", "close"); 

    req.onreadystatechange = function() 
    { 
     if(req.readyState == 4) 
     { 
      if(req.status == 204 || req.status == 200) 
      { 
       //Success. Update the feed. 
       self.__postFeed.update(); 
       self.__form.reset(); 
      } 
      else 
      { 
       //TODO: Better error handling. 
       alert("Error submitting post:\n" + req.responseText); 
      } 
     } 
    } 
    req.send(formdata); 
+0

確實有點多的實驗:如果我有服務器返回的狀態代碼200,那麼MSIE工作正常。但是,如果它是204,它給了我瘋狂的1223狀態。我真的很想堅持204,因爲這是最合適的迴應,所以如果任何人都可以幫助弄清楚如何得到它,我會很感激。 – brianmearns 2012-04-06 14:31:27

回答

32

XMLHTTPRequest的實現還不能處理HTTP響應 的狀態代碼:204(無內容)是否正常;在'狀態屬性 價值1223

這是一個已知的bug和大多數基於JavaScript框架,在IE

所以解決您的問題將處理這種情況和1223正常化至204像這樣

// Normalize IE's response to HTTP 204 when Win error 1223. 
status : (conn.status == 1223) ? 204 : conn.status, 
// Normalize IE's statusText to "No Content" instead of "Unknown". 
statusText : (conn.status == 1223) ? "No Content" : conn.statusText 

參考:

道場 - http://trac.dojotoolkit.org/ticket/2418

原型 - https://prototype.lighthouseapp.com/projects/8886/tickets/129-ie-mangles-http-response-status-code-204-to-1223

YUI - http://developer.yahoo.com/yui/docs/connection.js.html(handleTransactionResponse)

JQuery的 - http://bugs.jquery.com/ticket/1450

ExtJS的 - http://www.sencha.com/forum/showthread.php?85908-FIXED-732-Ext-doesn-t-normalize-IE-s-crazy-HTTP-status-code-1223

+0

非常優秀的回覆,謝謝! – brianmearns 2012-04-06 18:05:50

+0

顯然IE在這種情況下也會丟棄所有響應頭文件!顯然它也發生在IE9中......但它已在IE10中修復。資料來源:http://www.enhanceie.com/ie/bugs.asp(ctrl + F爲1223) – 2013-01-11 02:36:18

+0

感謝您的更新:)好,它終於得到修復,我想知道他們爲什麼沒有backported修復IE9 atleast – 2013-01-11 20:14:42