[英]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.