MSIE 为 Ajax 请求返回状态码 1223

Posted

技术标签:

【中文标题】MSIE 为 Ajax 请求返回状态码 1223【英文标题】:MSIE Returns status code of 1223 for Ajax Request 【发布时间】:2012-04-20 06:39:25 【问题描述】:

我正在使用 ajax 请求(POST 方法)提交表单,并检查响应中的 HTTP 状态代码以查看它是否成功。

它在 Firefox 上运行良好,但在 MSIE-8 上当然不行。提交实际上工作正常,我可以检查我的服务器并确认提交工作并且服务器以状态码 204 响应。同样,firefox 正确地从请求对象中给了我 204 的状态码,但 IE 给出了一个状态码1223 的。

知道如何在 MSIE 中获得准确的状态代码吗?提交表单并检查响应的代码如下。

    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);

【问题讨论】:

做了更多的实验:如果我让服务器返回状态码 200,那么 MSIE 工作正常。但如果是 204,它给了我疯狂的 1223 状态。我真的很想坚持使用 204,因为这是最合适的响应,所以如果有人能帮助弄清楚如何获得它,我将不胜感激。 【参考方案1】:

MSXML HTTP 中的 XMLHTTPRequest 实现(在 至少在 Windows XP SP3+ 上的 IE 8.0 中)不处理 HTTP 响应 状态码 204(无内容)正确; `status' 属性有 值 1223。

这是一个已知的错误,大多数基于 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

【讨论】:

显然 IE 在这种情况下也会丢弃所有响应标头!显然它也发生在 IE9 中......但它已在 IE10 中修复。来源:enhanceie.com/ie/bugs.asp(ctrl+F 为 1223) 感谢更新 :) 很好,它终于被修复了,我想知道为什么他们至少没有将修复移植到 IE9 什么不起作用?你得到什么状态码作为响应? 显然这也适用于在 VBA/Excel 中使用的 MSXML2.XMLHTTP60 对象。谢谢。

以上是关于MSIE 为 Ajax 请求返回状态码 1223的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.7 Ajax 发布请求返回 419 状态码

AJAX | HTTP状态码

ajax对象。同步与异步及ajax发送请求

Ajax---错误处理

jQuery - 拦截所有Ajax请求(统一处理超时返回结果错误状态码 )

ajax请求常见状态码以及产生的原因