代码之家  ›  专栏  ›  技术社区  ›  icecream

如何从jquery(跨浏览器)返回的XML文档中获取整个XML字符串?

  •  40
  • icecream  · 技术社区  · 17 年前

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

    我的工作示例来自 here .“用XML做点什么”——这部分是我目前的处境。我觉得这应该是微不足道的,但我不知道怎么做。是否有“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作为一个字符串。

    6 回复  |  直到 10 年前
        1
  •  44
  •   BalusC    11 年前

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

    您希望它是纯文本而不是XML对象?更改 dataType 从 'xml' 到 'text' .查看 $.ajax documentation 更多选项。

        2
  •  54
  •   jitter    17 年前

    如果两者都需要,则以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 更合适吗?

        3
  •  23
  •   Paul Gorbas    14 年前

    在Java脚本中,还可以轻松地将XML对象转换为字符串:

    var xmlString = (new XMLSerializer()).serializeToString(xml);
    
        4
  •  1
  •   Ryan Brunner    17 年前

    如果只需要一个表示jquery返回的XML的字符串,只需将数据类型设置为“text”,而不是试图将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
  •  1
  •   vmfedor    15 年前

    尽管这个问题已经得到了回答,但我想指出一个警告:当使用jquery和Internet Explorer检索XML时,您 必须 将内容类型指定为“text/xml”(或“application/xml”),否则将无法像使用jquery的XML那样分析数据。

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

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

    希望能帮助别人:)

        6
  •  1
  •   RibeiroBreno    10 年前

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

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

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

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