簡體   English   中英

模擬用於XML讀取的jQuery $ .post / $ .ajax

[英]Simulating jQuery $.post / $.ajax for XML reading

可能是奇怪的問題; 我正在嘗試將XML加載到jQuery中以遍歷它。

使用$ .post我可以完美地完成這項工作,並將XML指定為dataType。 我的問題圍繞如何讓jQuery使用該dataType來理解相同的數據(如果它已經在頁面中),即我將它放在一個變量中。

每當我在變量中使用完全相同的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);
}

UPDATE

jQuery 1.5的新parseXML()方法正是如此,並且似乎運行良好。

var xml = $.parseXML("<blah><moo>134</moo></blah>");

這為您提供了一個XML文檔,然后您可以通過常規方式使用jQuery遍歷:

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

這是一個使用$ .ajax並跨瀏覽器工作的示例(Chrome,IE8,FireFox 3.6):

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();
    }});

這也將它設置為實際的XML,jQuery可以使用.find().text()像普通的DOM樹一樣遍歷。

編輯::只需閱讀問題的新評論。 你能在這里發布一個失敗的xml的例子嗎? 此外,使用.html()可能會導致錯誤,而.text()應返回空節點的空字符串。

編輯編輯::這是一個小提示 ,沒有顯示任何錯誤,您使用什么代碼進行遍歷,是所有瀏覽器還是只是一個特定的?

您嘗試在將xml發送到jQuery之前對其進行urlencode?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM