我正在尝试使用jQuery以跨浏览器兼容的方式从xml中提取值。我在firefox中没有遇到任何问题,但不幸的是,这也必须与IE兼容。
我的jQuery代码如下所示:
$(document).ready(function()) {
$.get("file.xml", {}, function(parseRefreshTime){
alert('This line is executed in IE.');
$("created", parseRefreshTime).each(function() {
alert('This line is *not* executed in IE.');
refreshTime = $(this).text();
//do stuff with refreshtime
});
});
});
这将在我的xml文件中提取<created>
节点的节点值。
我在我的页面中引用了jQuery库,它在Firefox中正确解析,所以我假设我的解析代码是合适的。我在Firefox中获得了两个警报,但只是IE中的第一个警告。
我可以发誓我昨天有非常相似的代码工作,但我必须调整一些东西并以某种方式打破它。经过近一个小时的战斗,我正在寻找另一双眼睛。
有谁能发现我在这里做错了什么?
答案 0 :(得分:4)
一些事情:
xml
$(doc)
中包装返回的XML对象并使用find
查询XML reader
应为ready
并且你有一个额外的右括号在IE6上这对我有用。如果这对您不起作用,您可能需要查看是否正确提供xml。
<强>的index.html 强>:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
$.get("test.xml", null, function(doc) {
$(doc).find('created').each(function() {
alert($(this).text());
})
}, 'xml');
});
</script>
</head>
<body>
</body>
</html>
<强>的test.xml 强>:
<?xml version="1.0" encoding="UTF-8"?>
<created>2010-01-07 00:00:00</created>
答案 1 :(得分:2)
尝试用parseRefreshTime
$()
$("created", $(parseRefreshTime)).each(function() {
alert('This line is *not* executed in IE.');
refreshTime = $(this).text();
//do stuff with refreshtime
});
或尝试使用$(parseRefreshTime).find('created')
$(parseRefreshTime).find("created").each(function() {
alert('This line is *not* executed in IE.');
refreshTime = $(this).text();
//do stuff with refreshtime
});
更新的
另外,请尝试将type
指定为xml
。
$.get("file.xml", {}, <callback>, "xml")
答案 2 :(得分:1)
确保'text / xml'用作xml文件的内容类型。
答案 3 :(得分:0)
我正在使用这样的东西:
if ($.browser.msie){
var tempXML = new ActiveXObject("Microsoft.XMLDOM");
tempXML.async = false;
tempXML.loadXML(data);
xmlc = tempXML;
items = $($(xmlc)[0]);
} else if(window.DOMParser){
items = $(new DOMParser().parseFromString(data, "text/xml").childNodes[0]);
} else {
xmlc = data;
items = $($(xmlc)[1]);
}
基本上,请尝试使用Microsoft的XML .XMLDOM方式。你能提供样品xml吗?
答案 4 :(得分:0)
XML和IE6最大的洞穴之一是字符编码。确保您的浏览器可以正确解释文件。与文档本身相比,您的网络服务器很可能正在为页面提供不同的编码标题。