Javascript 模拟jQuery$.post/$.ajax进行XML读取

Javascript 模拟jQuery$.post/$.ajax进行XML读取,javascript,jquery,xml,parsing,Javascript,Jquery,Xml,Parsing,可能是个奇怪的问题;我正在尝试将XML加载到jQuery中以遍历它 使用$.post我可以很好地做到这一点,并将XML指定为数据类型。我的问题围绕着如何让jQuery使用该数据类型来理解相同的数据(如果该数据已经在页面中,即在变量中) 每当我在变量中使用完全相同的XML数据时,它就不能正确地遍历它 我试着去掉声明,去掉问号、转义引号等 我试过像这样加载:- var xml = new XML('<blah><moo>134</moo></blah>

可能是个奇怪的问题;我正在尝试将XML加载到jQuery中以遍历它

使用$.post我可以很好地做到这一点,并将XML指定为数据类型。我的问题围绕着如何让jQuery使用该数据类型来理解相同的数据(如果该数据已经在页面中,即在变量中)

每当我在变量中使用完全相同的XML数据时,它就不能正确地遍历它

我试着去掉声明,去掉问号、转义引号等

我试过像这样加载:-

var xml = new XML('<blah><moo>134</moo></blah>');
var xml=newxml('134');
当然

var xml = $('<blah><moo>134</moo></blah>');
var xml=$('134');

var xml='134';

var xml=“134”;

等等。我做错了什么?

下面是一个使用$.ajax并跨浏览器工作的示例(Chrome、IE8、FireFox 3.6):

这还将它设置为实际的XML,jQuery可以像普通DOM树一样使用
.find()
.text()
遍历它

编辑::只需通读问题的新注释。您能在这里发布一个失败的xml示例吗?另外,使用
.html()
可能会导致错误,而
.text()
应该为空节点返回一个空白字符串


编辑::这是一个显示无错误的示例,您使用什么代码来遍历它,它是所有浏览器还是只是一个特定的浏览器

您试图在将xml发送到jQuery之前对其进行URL编码?

问题在于,在执行Ajax请求时,jQuery不解析xml,除非使用
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);
}
这将为您提供一个XML文档,然后您可以使用jQuery以通常的方式遍历该文档:

var $xml = $(xml);
alert($xml.find("moo:first")[0].nodeName);

+1我以前从未听说过这样做,但我可以看出这将是一个多么有用的功能。您能展示一下用于遍历XML字符串的代码吗?试试这个:我们发现了更多有关此问题的信息。是的,火箭。。。代码确实在那里工作,但是将(大型)xml放入并遍历空节点失败。也就是说,我从一个没有值的节点获取一个值。这似乎指向了这个问题;jQueryPost/ajax对XML做了一些事情,以消除它知道jQuery遇到的问题。我们一直在不断地剔除,但是仍然遇到由XML数据创建的对象的问题。如果有人知道jQuery在数据类型处理post/ajax中如何处理xml的一种详细说明/示意图,那就真的很有帮助了。可能相关(在jQuery 1.5中修复):好的,那么我们有:--当它达到极限时,它失败了。正如我所说的,$.post.Added一个fiddle显示它返回空,当我认为我的注意力集中在错误的方向上时,您使用什么代码遍历该字符串。
var pathToXML = "http://www.site.com/data/data.xml";
var xml;
    $.ajax({type: "GET", 
            url: pathToXML,
            cache: false, 
            dataType: ($.browser.msie) ? "text" : "xml",
            error: function(XMLHttpRequest, textStatus, errorThrown){alert(textStatus)},
            success: function(data){
            // workaround for msie
            if (typeof data == "string") {
                    xml = new ActiveXObject("Microsoft.XMLDOM");
                    xml.async = false; xml.loadXML(data);
            } else { xml = data; }
            xml.setProperty("SelectionLanguage", "XPath");
            // end workaround
            // use $(xml).find('node').text();
            var bobsNodeValue = $(xml).find("node[id='bob']").text();
    }});
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);
}
var xml = $.parseXML("<blah><moo>134</moo></blah>");
var $xml = $(xml);
alert($xml.find("moo:first")[0].nodeName);