Учтите это:
<!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
добавляется к документу. Я вижу текст в моем окне браузера.
Это работает как и ожидалось в Firefox. Тем не менее, он не работает в Opera, если я не изменю запрос с 'atom\\:x'
на 'x'
. В этом случае он работает в 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? Если да, то какой стандарт говорит об этом?
Надеюсь, вы можете помочь:)