之间的XML命名空间和xhr.responseXML考虑一下:文件已加载时差异的jQuery与Opera和Firefox
<!DOCTYPE HTML>
<html><head><title>XML-problem</title>
<script src="jquery-1.3.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$('<p/>').load("text.xml", function(responseText, textStatus, xhr) {
var xml = $(xhr.responseXML);
var x_txt = xml.find('atom\\:x').text();
$(this).text(x_txt).appendTo('#container');
});
});
</script>
</head><body><div id="container" /></body></html>
该脚本应该加载text.xml。 text.xml看起来是这样的:
<xml xmlns:atom="http://www.w3.org/2005/Atom">
<atom:x>Text</atom:x>
</xml>
当这个文件已经被加载,atom:x
-node的文本内容附加到文件。我可以在浏览器窗口中看到“文本”。
这在Firefox中按预期工作。但是,除非将查询从'atom\\:x'
更改为'x'
,否则它在Opera中不起作用。在这种情况下,它适用于Opera,但不适用于Firefox。
我发现了一种解决方法,即将查询更改为'atom\\:x, x'
,但我更愿意深究这一点。
现在的有趣的转折:我可以通过改变
var xml = $(xhr.responseXML);
内联XML,而不是直接从XHR得到它的进入
var xml = $('<xml xmlns:atom="http://www.w3.org/2005/Atom"><atom:x>Text</atom:x></xml>');
在这种情况下'atom\\:x'
查询会在两个浏览器中给出期望的结果,并且仅在'x'
将在两个浏览器中都不会产生结果。
事实上,这在Opera中的作用不同,这让我得出结论,前者的行为是Opera中的一个错误。这是一个合理的结论吗?我在哪里可以指出描述这种工作原理的标准?
结论:
- 什么是另类的变通针对此问题?比我找到的更好吗?
- 这是Opera中的错误吗?如果是的话,哪个标准是这样说的?
希望你能帮助:)
貌似指出错误。 http://thompson-web.blogspot.com/2009/03/jquery-xml-and-namespaces.html http://dev.jquery.com/ticket/155 – 2009-10-21 15:28:48
@Stefan:所以,jQuery应该只要查询'x',无论浏览器如何,都给我结果? – 2009-10-21 15:35:02
你为什么使用'load'?加载应该是html,而不是xml。它可以与'ajax'或'get'一起使用吗? – Kobi 2009-10-21 17:47:27