使用以下脚本的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);
};
};
};
答案 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"
已解决问题。