可能是个奇怪的问题;我正在尝试将 XML 加载到 jQuery 中以遍历它。
使用 $.post 我可以完美地做到这一点,并将 XML 指定为数据类型。我的问题围绕着如何让 jQuery 使用该数据类型来理解相同的数据(如果它已经在页面中),即我将它放在一个变量中。
每当我在变量中使用完全相同的 XML 数据时,它就无法正确地遍历它。
我试过删除声明并删除问号、转义引号等。
我试过像这样加载:-
var xml = new XML('<blah><moo>134</moo></blah>');
当然
var xml = $('<blah><moo>134</moo></blah>');
和
var xml = '<blah><moo>134</moo></blah>';
和
var xml = "<blah><moo>134</moo></blah>";
等我做错了什么?
最佳答案
问题是 jQuery 不解析 XML,除非在执行 Ajax 请求时使用 XMLHttpRequest
的内置浏览器 responseXML
属性。如果您将 XML 字符串传递给 $()
,它会简单地假定它是 HTML,将其指定为 HTML 元素的 innerHTML
并读取该 HTML 元素的子元素。这不是 XML 解析。
要解析 XML,您可以使用如下函数:
var parseXml;
if (window.DOMParser) {
parseXml = function(xmlStr) {
return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
};
} else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) {
parseXml = function(xmlStr) {
var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlStr);
return xmlDoc;
};
} else {
parseXml = function() { return null; }
}
var xml = parseXml("<blah><moo>134</moo></blah>");
if (xml) {
window.alert(xml.documentElement.nodeName);
}
更新
jQuery 1.5 的新 parseXML()
方法正是这样做的,而且似乎运作良好。
var xml = $.parseXML("<blah><moo>134</moo></blah>");
这会为您提供一个 XML 文档,然后您可以使用 jQuery 以通常的方式遍历该文档:
var $xml = $(xml);
alert($xml.find("moo:first")[0].nodeName);
关于javascript - 模拟 jQuery $.post/$.ajax 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808566/