Javascript MSIE为Ajax请求返回状态代码1223
我正在使用ajax请求(POST方法)提交一个表单,并检查响应上的HTTP状态代码,看它是否成功 它在Firefox上运行良好,但在MSIE-8上当然不行。提交工作正常,我可以检查我的服务器,确认提交工作正常,服务器响应状态代码为204。同样,firefox正确地给出了请求对象的状态代码204,但IE给出的状态代码是1223 你知道我如何在MSIE中获得准确的状态码吗?下面是提交表单并检查响应的代码Javascript MSIE为Ajax请求返回状态代码1223,javascript,ajax,internet-explorer,xmlhttprequest,Javascript,Ajax,Internet Explorer,Xmlhttprequest,我正在使用ajax请求(POST方法)提交一个表单,并检查响应上的HTTP状态代码,看它是否成功 它在Firefox上运行良好,但在MSIE-8上当然不行。提交工作正常,我可以检查我的服务器,确认提交工作正常,服务器响应状态代码为204。同样,firefox正确地给出了请求对象的状态代码204,但IE给出的状态代码是1223 你知道我如何在MSIE中获得准确的状态码吗?下面是提交表单并检查响应的代码 var req = new XMLHttpRequest(); req.open
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);
MSXMLHTTP中的XMLHTTPRequest实现(在
至少在IE 8.0中,Windows XP SP3+不处理HTTP响应
状态代码204(无内容)正确;“status”属性已被删除
该值为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
参考资料:
道场
原型-
YUI-(HandletTransactionResponse)
JQuery-
ExtJS-做了更多的实验:如果我让服务器返回200的状态码,那么MSIE工作正常。但如果它是204,它给了我那个疯狂的1223状态。我真的很想坚持使用204,因为这是最合适的响应,所以如果有人能帮我弄清楚如何获得它,我将不胜感激。显然IE在这种情况下也会删除所有响应头!显然,IE9中也有这种情况。。。但它已经在IE10中修复。来源:(ctrl+F代表1223)感谢更新:)很好,它终于被修复了,我想知道为什么他们至少还没有将修复后端口到IE9什么不起作用?您得到的响应是什么状态代码?显然,这也适用于VBA/Excel中使用的MSXML2.XMLHTTP60对象。非常感谢。