gil*_*ly3 0 javascript xml xslt jquery internet-explorer-10
仅在Internet Explorer 10中,我收到转换从AJAX响应返回的XML的错误:
Object不支持属性或方法'transformNode'
这是我的代码:
function transformXML(xmlUrl, xsl) {
$.ajax({
type: 'GET',
url: xmlUrl,
success: function (xml, status, xhr) {
// cross-browser logic omitted for simplicity
xml.transformNode(xsl);
},
dataType: 'xml'
});
}
Run Code Online (Sandbox Code Playgroud)
这适用于IE7 - IE9.IE10有什么问题?
这是因为,从IE 10开始,XMLHttpRequest.responseXML
默认情况下返回"原生XML文档"而不是MSXML文档.
您可以XMLHttpRequest
通过将responseType
属性设置为强制来强制对象返回MSXML对象"msxml-document"
.不幸的是,这在Google Chrome中会中断,因此您需要将其包装在try/catch中.
在jQuery的beforeSend
函数中分配它:
function transformXML(xmlUrl, xsl) {
$.ajax({
type: 'GET',
url: xmlUrl,
beforeSend: function (xhr, settings) {
try { xhr.responseType = "msxml-document"; } catch(err){}
},
success: function (xml, status, xhr) {
// cross-browser logic omitted for simplicity
xml.transformNode(xsl);
},
dataType: 'xml'
});
}
Run Code Online (Sandbox Code Playgroud)
注意: 不要尝试使用该xhrFields
设置 - 在尝试将responseType
值设置为无效时,jQuery无法处理Chrome(以及其他浏览器?)引发的错误.这需要包含在try/catch中,最好的方法是在beforeSend
函数中.