2012-04-06 34 views
14

Tôi đang gửi biểu mẫu bằng cách sử dụng yêu cầu ajax (phương thức POST) và kiểm tra mã trạng thái HTTP trên phản hồi để xem nó có thành công hay không.MSIE Trả về mã trạng thái 1223 cho Ajax Request

Nó hoạt động tốt trên Firefox, nhưng tất nhiên không có trên MSIE-8. Việc gửi thực sự hoạt động tốt, tôi có thể kiểm tra máy chủ của mình và xác nhận rằng quá trình gửi đã hoạt động và máy chủ trả lời bằng mã trạng thái là 204. Một lần nữa, firefox cung cấp cho tôi mã trạng thái 204 từ đối tượng yêu cầu, nhưng IE cung cấp mã trạng thái của 1223.

Bất kỳ ý tưởng nào về cách tôi có thể nhận được mã trạng thái chính xác trong MSIE? Mã gửi biểu mẫu và kiểm tra phản hồi bên dưới.

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

Đã làm một chút thử nghiệm nhiều hơn: nếu tôi có máy chủ trả về một mã trạng thái của 200, sau đó MSIE hoạt động tốt. Nhưng nếu đó là 204, nó mang lại cho tôi trạng thái điên rồ 1223. Tôi thực sự muốn gắn bó với 204 bởi vì đó là câu trả lời thích hợp nhất, vì vậy nếu bất cứ ai có thể giúp tìm ra cách để có được điều đó, tôi sẽ đánh giá cao nó. – brianmearns

Trả lời

32

thi XMLHttpRequest trong MSXML HTTP (tại nhất trong IE 8.0 trên Windows XP SP3 +) không xử lý phản hồi HTTP với mã trạng thái 204 (Không có nội dung) đúng cách; 'cái tình trạng bất động sản có giá trị 1223.

Đây là một lỗi đã biết và hầu hết các khuôn khổ javascript dựa xử lý tình huống này và bình thường hóa 1223-204 trong IE

Vì vậy, giải pháp cho vấn đề của bạn sẽ giống như

// 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 

tham khảo này:

võ đường - http://trac.dojotoolkit.org/ticket/2418

nguyên mẫu - 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

Phản hồi rất tuyệt vời, cảm ơn bạn! – brianmearns

+0

Rõ ràng IE cũng giảm tất cả các tiêu đề phản hồi trong trường hợp này! Và dường như nó cũng xảy ra trong IE9 ... nhưng nó đã được sửa trong IE10. Nguồn: http://www.enhanceie.com/ie/bugs.asp (ctrl + F cho 1223) –

+0

cảm ơn cho cập nhật :) tốt rằng nó đã được cố định cuối cùng, tôi tự hỏi tại sao họ đã không backported sửa chữa để IE9 atleast –

Các vấn đề liên quan