在Internet Explorer中,XMLHttpRequest响应没有头信息。

4

我使用ExtJS进行XMLHttpRequest请求到一个服务,该服务不返回responseText,只返回204以及响应头TotalNearby。在Firefox浏览器中这个调用完美运行,但是在Internet Explorer 8中,两个警告框都为空。我做错了什么?

Ext.Ajax.request({
    url: 'services/getNearby',
    method: 'GET',
    params: {
        'lat': 34,
        'lon': -90
    },
    headers: {
        'Authorization': AUTH_TOKEN
    },
    success: function(response) {
        if (response.status == 204) {
            alert(response.getAllResponseHeaders());
            alert(response.getResponseHeader('Total-Nearby'));
        }
    },
    failure: function(response) {
        alert('Server status ' + response.status);
    }
});
1个回答

5
根据网站http://www.enhanceie.com/ie/bugs.asp,这是IE 7/8的一个bug:
IE0013: IE XMLHTTP实现将204响应代码转换为虚假的1223状态码
http://dev.jquery.com/ticket/1450中描述,IE中的XMLHTTPRequest对象将返回状态码1223并丢弃所有响应头,如果服务器返回HTTP/204无内容响应。
这是由URLMon的内部设计造成的(如果服务器没有响应请求,则绑定返回操作中止(1223))。
在IE8、IE7(可能还有更早版本)中复制。
解决方法:将"1223"视为等同于204。注意:在这种情况下,HTTP头仍不可用。
如果您看到空警报,意味着IE没有将状态代码更改为1223,则该错误的那部分可能已经修复。但是,我更担心以下声明:
注意:在这种情况下,HTTP头仍不可用。
因为这似乎是您面临的问题。您需要使用不响应内容的服务吗?最好返回带有消息正文的典型响应。

幸运的是,我可以修改服务。谢谢! - originalbryan
204是由RFC规范定义的典型状态码。 - user2524908
@user2524908,请问我在回答中哪里暗示了204不是规范定义的正确状态码?正如我在上面的回答中所述,这是IE 7/8无法正确处理ajax 204的问题。 - McStretch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接