首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IE 10中转换XML AJAX响应时出错

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

Stack Overflow用户
提问于 2012-11-30 20:47:27
回答 2查看 7.8K关注 0票数 0

仅在Internet 10中,转换AJAX响应返回的XML时出错:

对象不支持属性或方法“transformNode”

这是我的代码:

代码语言:javascript
复制
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'
    });
}

这在IE7 - IE9中有效。IE10怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-30 20:47:27

这是因为 returns a "native XML document" by default instead of an MSXML document

您可以强制XMLHttpRequest对象返回MSXML对象,方法是将responseType属性设置为"msxml-document"。不幸的是,这破坏了Google,所以您需要尝试/捕捉它。

在jQuery的beforeSend函数中分配它:

代码语言:javascript
复制
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'
    });
}

注意:不尝试使用xhrFields设置- jQuery不处理由Chrome (以及其他浏览器)引发的错误?尝试将responseType设置为无效值时。这需要用try/catch包装,最好的方法是在beforeSend函数中这样做。

票数 8
EN

Stack Overflow用户

发布于 2013-09-30 02:02:06

@mauris:它在jQuery1.9.1中被破坏了,因为他们忽略了responseXML,并从responseText创建了一个新的DOM,这是行不通的。

我修改了jQuery1.9.1(在它复制responseText之后,第8570行)

代码语言:javascript
复制
try
{
  var xml = xhr.responseXML;
  if (xml && xml.documentElement)
    responses.xml = xml;
} catch (_) { }

这就解决了这个问题。为了安全起见,代码与它在1.8.3中所做的相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13652932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档