在IE 10中转换XML AJAX响应时出错

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有什么问题?

gil*_*ly3 8

这是因为,从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函数中.