我尝试过但未能找到如何从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作为字符串。
答案 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!');
}