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

时间:2009-11-04 16:34:51

标签: javascript jquery html xml xmldocument

我尝试过但未能找到如何从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 个答案:

答案 0 :(得分:54)

如果您想要两者,请以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会不合适?

答案 1 :(得分:44)

  

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

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

答案 2 :(得分:23)

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

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

答案 3 :(得分:1)

如果您只需要一个表示从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
    }
});

答案 4 :(得分:1)

虽然这个问题已经得到解答,但我想指出一个警告:当使用带有Internet Explorer的jQuery检索XML时,必须将内容类型指定为“text / xml”(或“application / xml”)否则你将无法像使用jQuery一样解析数据。

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

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

希望能帮助某人:)

答案 5 :(得分:1)

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

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

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

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