AJAX:在IE 11中,responseXML为null

时间:2014-09-18 11:18:12

标签: javascript ajax asp-classic

使用以下脚本的AJAX调用在IE 11上失败。它适用于IE-6的早期版本(这是旧代码),怀疑是7,8和9。它适用于Firefox 32.0.1,可能早在2(这是非常古老的代码)。

objXML = req.responseXML.documentElement;处的脚本错误,错误为“无法获取未定义或空引用的属性'documentElement'。”。

在调试时,req.responseXML为null,而req.responseText具有预期的XML。搜索此问题时,解决方案围绕响应类型不是'text / xml',但调试器显示响应类型是正确的'text / xml'。

为什么req.responseXML为空?

var req;

function loadXMLDoc(url) 
{
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        };
    };
};

function processReqChange() 
{
    // only if req shows "complete"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            // ...processing statements go here...
            //alert(req.responseText);

            objXML = req.responseXML.documentElement;

            // snip... using response data...

        } else {
            alert("There was a problem retrieving the XML data:\n\n" + req.statusText);
            alert(req.status + "\n\n" + req.responseText);
        };
    };
};

1 个答案:

答案 0 :(得分:2)

事实证明,Content-Type标头被设置了两次。返回XML的Classic ASP页面包含以下内容,用于设置Content-Type标题,belt-and-braces样式:

Call Response.AddHeader("Content-Type", "text/xml")
Response.ContentType = "text/xml"

IE的F12开发人员工具中的网络视图上的摘要标签显示了'类型' as' text / xml'。详细信息选项卡显示两个内容类型'条目'响应标题'。 IE 11不喜欢这个。删除第一个调用以设置内容类型并仅保留Response.ContentType = "text/xml"已解决问题。