我正在尝试通过Ajax请求加载XML文档(特别是RSS提要),解析它,并根据所述提要将一些信息插入到我的页面中。该代码在Firefox,Opera,Chrome和Safari中运行良好,但不适用于IE7。去图。
在做了一些初步调试之后,我发现通过请求检索了XML字符串 ,并且当我尝试从文档中解析节点时,我得到的特定节点类型是的 HTMLUnknownElement
以下是相关代码:
$.get('feed.php', function(oXmlDoc) {
var titles = $(oXmlDoc).find('title');
var dates = $(oXmlDoc).find('pubDate');
for(var i = 0; i < 5; i++) {
parseNodes(titles[i].firstChild.nodeValue, dates[i].firstChild.nodeValue));
}
});
parseNodes
函数实际上从未被命中,因为IE无法访问firstChild
,因此无法访问nodeValue
。
提前感谢有关如何解决此问题的任何想法和/或建议。
答案 0 :(得分:1)
我能够解决这个问题,但它需要一些IE特定的代码才能解决它的问题。基本上,这就是我最终必须解决问题的方法。
首先,我验证了我的服务器端代码返回了正确的内容类型:
header('Content-Type: application/rss+xml');
之后,我检查了当前正在访问该页面的浏览器:
if($.browser.msie) {
// ie-specific code (see below)
} else {
// code as posted in the question
}
为了更好地控制ajax请求,我选择使用jQuery的$.ajax
函数而不是$.get
函数。
var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
$.ajax({
url: "feed.php",
processData: false,
data: oXmlDoc,
success: function(sXml) {
oXmlDoc.loadXML(sXml)
var titles = $('title', oXmlDoc);
var dates = $('date', oXmlDoc);
for(var i = 0; i < 5; i++) {
parseNodes(titles[i].childNodes[0].nodeValue, dates[i].childNodes[0].nodeValue));
}
}
});
无论如何,它并不像我想的那样优雅,但它完成了工作。
答案 1 :(得分:1)
这是我使用GET工作
$.get("url.php", { mode: "r"},
function(data){
//FIX FOR UNKNOWNHTML OBJECT RETURNED IN IE
if(navigator.appName.indexOf("Microsoft")>=0) {
var xData = new ActiveXObject("Microsoft.XMLDOM");
xData.loadXML(data);
} else {
var xData = $(data)
}
$(xData).find("room").each(function() {
alert($(this).find("name:first").text());
});
});
答案 2 :(得分:0)
修改强>
在您发表评论后,我看了一下您的代码。与selectors不同,Find返回一个jQuery对象,但是你需要实际的DOM对象。尝试使用get()从jQuery中检索元素数组。您可能还需要使用childNodes []。
$.get('feed.php', function(oXmlDoc) {
var titles = $(oXmlDoc).find('title').get();
var dates = $(oXmlDoc).find('pubDate').get();
for(var i = 0; i < 5; i++) {
parseNodes(titles[i].childNodes[0].nodeValue,
dates[i].childNodes[0].nodeValue));
}
});