【问题标题】:How do I get the entire XML string from a XMLDocument returned by jQuery (cross browser)?如何从 jQuery(跨浏览器)返回的 XMLDocument 中获取整个 XML 字符串?
【发布时间】:2016-03-02 01:27:25
【问题描述】:

我尝试过并未能找出如何从 GET 返回的 XMLDocument 中获取整个 XML 字符串。 SO上有很多关于如何查找或替换对象中特定元素的问题,但我似乎找不到任何关于如何将整个文档作为字符串获取的答案。

我正在使用的示例来自here。 “用 xm​​l 做某事”部分是我目前所处的位置。我觉得这应该是微不足道的,但我不知道怎么做。是否有可用于此目的的“xml.data()”或类似名称?

$.ajax({
    url: 'document.xml',
    type: 'GET',
    dataType: 'xml',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        // do something with xml
    }
});

用例是我想将 xml 提供给 flash 插件,为此我需要实际的 XML 作为字符串。

【问题讨论】:

    标签: javascript jquery html xml xmldocument


    【解决方案1】:

    如果两者都需要,则以 XML 文档和字符串的形式获取响应。你应该可以做到

    success: function(data){
      //data.xml check for IE
      var xmlstr = data.xml ? data.xml : (new XMLSerializer()).serializeToString(data);
      alert(xmlstr);
    }
    

    如果你想要它作为字符串,为什么你指定dataType:xml 不会那么dataType:text 更合适?

    【讨论】:

    • 如果我设计了一个 XML 对象,为什么我没有 API 来获取数据?
    • XML 对象用于获取/操作存储在 XML 中的数据。你想要 XML 本身,这是一个微妙的不同:)
    • 奇怪的与 BalusC 相同的答案,但没有一个赞成票也没有被接受??
    • @Olly:如果我两者都想要怎么办?然后我应该将它作为字符串获取,然后在客户端上创建一个 XMLDocument 吗?将“xml”更改为“text”现在解决了我的问题,但我仍然认为 XMLDocument 上应该有一个“getData()”函数或类似函数。 @jitter:我认为 BalusC 在你之前回答了,但我会支持你。
    • 如果您需要 xmldocument 和字符串,请提供答案
    【解决方案2】:

    我需要实际的 XML 作为字符串

    您希望它是纯文本而不是 XML 对象?将 dataType'xml' 更改为 'text'。请参阅$.ajax documentation 了解更多选项。

    【讨论】:

    • 谢谢。我知道这是微不足道的:)
    • +1 尽管在docs I've found 中没有记录,它仍然有效。感谢 ajax#options 链接。
    【解决方案3】:

    您还可以在您的 java 脚本中轻松地将 xml 对象转换为字符串:

    var xmlString = (new XMLSerializer()).serializeToString(xml);
    

    【讨论】:

    • jitter's answer 更好,因为它也支持 IE。
    • 似乎对我不起作用:TypeError:XMLSerializer.serializeToString 的参数 1 没有实现接口 Node。
    【解决方案4】:

    如果您只需要一个表示从 jquery 返回的 xml 的字符串,只需将您的数据类型设置为“文本”,而不是尝试将 xml 解析回文本。以下内容应该只是从您的 ajax 调用中返回原始文本:

    $.ajax({
        url: 'document.xml',
        type: 'GET',
        dataType: 'text',
        timeout: 1000,
        error: function(){
            alert('Error loading XML document');
        },
        success: function(xml){
            // do something with xml
        }
    });
    

    【讨论】:

      【解决方案5】:

      虽然已经回答了这个问题,但我想指出一个警告:在 Internet Explorer 中使用 jQuery 检索 XML 时,您必须将 content-type 指定为“text/xml”(或"application/xml") 否则您将无法像使用 jQuery 解析 XML 一样解析数据。

      您可能认为这是一件显而易见的事情,但当我使用 Mozilla/Chrome/Opera 而不是 IE 时,我发现了这一点。在检索内容类型为“文本”的 XML 的“字符串”时,除 IE 之外的所有浏览器仍然允许您解析该数据(使用 jQuery 选择器),就好像它是 XML 一样。 IE 不会抛出错误,也不会向 jQuery 选择语句返回任何结果。

      因此,在您的示例中,只要您只需要 XML 的字符串序列化版本并且不希望 jQuery 对 XML DOM 进行任何类型的选择,您就可以将 content-type 设置为“text” .但是,如果您还需要使用 jQuery 解析 XML,则需要编写一个自定义例程,为您将 XML 序列化为字符串,或者检索内容类型为“xml”的 XML 版本。

      希望对某人有所帮助:)

      【讨论】:

        【解决方案6】:

        您可以获取请求中使用的本机 XMLHttpRequest 对象。 在我发布这个答案时,jQuery 文档说明了一些方法。

        其中一个是通过成功回调的第三个参数:

        success: function(xml, status, xhr){
            console.log(arguments);
            console.log(xhr.responseXML, xhr.responseText);
            console.log('Finished!');
        }
        

        举个完整的例子: https://jsfiddle.net/44m09r2z/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-02
          • 1970-01-01
          相关资源
          最近更新 更多