【发布时间】:2010-12-08 18:23:39
【问题描述】:
考虑一下:
<!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',但我更想深入了解。
现在有趣的转折:我可以直接内联 xml,而不是通过更改从 XHR 中获取它
var xml = $(xhr.responseXML);
进入
var xml = $('<xml xmlns:atom="http://www.w3.org/2005/Atom"><atom:x>Text</atom:x></xml>');
在这种情况下,'atom\\:x' 的查询将在两个浏览器中都给出所需的结果,而 'x' 在两个浏览器中都不会给出任何结果。
这在 Opera 中工作方式不同的事实使我得出结论,前一种行为是 Opera 中的一个错误。这是一个合理的结论吗?我在哪里可以指出描述这应该如何工作的标准?
总结:
- 此问题的替代解决方法是什么?比我找到的那个更好吗?
- 这是 Opera 中的错误吗?如果是,哪个标准是这样说的?
希望你能帮忙:)
【问题讨论】:
-
@Stefan:所以,无论浏览器如何,jQuery 都应该在只查询“x”时给我结果?
-
你为什么使用
load?加载应该是 html,而不是 xml。它是否适用于ajax或get? -
我在实际应用中实际使用
ajax。我为这个示例选择了load以使其更小。无论如何,它对观察到的行为没有任何影响。 -
@brianpeiris:我看到您将 XML 文档作为 text/html 提供。 IIRC,这导致 XHR 将其视为文本,而不是 XML。这可能是我们两个设置之间存在差异的原因。
标签: javascript jquery firefox opera xmlhttprequest