#jquery #ajax #xml #namespaces
#jquery #ajax #xml #пространства имен
Вопрос:
У меня проблема с использованием внешнего XML-файла для моего проекта AJAX. Когда я меняю XML-переменную AJAX на содержимое XML, я получаю правильный вывод. Но вывод приведенного ниже кода «не определен». Что я делаю не так?
html и AJAX-код
<html>
<head><title>xml file in jquery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
<table>
</table>
<script>
$(document).ready( function() {
Dataextract();
fetch();
});
function fetch() {
setTimeout( function() {
corporateData();
fetch();
}, 10000);
}
function Dataextract() {
$.ajax({
type: "GET",
url: "test.xml",
dataType: "xml",
success: function(xml) {
$("table").children().remove();
$(xml).find("feed").each( function() {
var $entry = $(this);
var mydata = $entry.find('w\:entry').attr('w:date');
document.write(mydata);
$("table").append(info);
});
},
});
};
</script>
</body>
</html>
Мой внешний XML-файл (‘test.xml ‘) выглядит примерно так:
<rsp><feed><w:entry w:date="2012-08-15" w:circulation="154" w:hits="538" w:downloads="0" w:reach="30"/></feed></rsp>
Комментарии:
1. Вы добавляете
info
переменную, но она не существует:$("table").append(info);
Ответ №1:
Я думаю, что проблема заключается в попытке двойного экранирования ‘:’. Попробуйте это:
var mydata = $entry.find('w:entry').attr('w:date');
Либо это, либо, возможно, проблема в том, что вы не экранировали имя атрибута? Я не использовал пространства имен при синтаксическом анализе Xml с помощью jQuery, но это может быть другим решением:
var mydata = $entry.find('w\:entry').attr('w\:date');
В качестве альтернативы, если это не поможет, попробуйте добавить некоторый отладочный код и использовать console.log. Я бы начал с этого:
var mydata = $entry.find('w:entry');
console.log(mydata);
console.log(mydata.length);
Это, по крайней мере, скажет вам, работает ли ваше выражение find.
Я не уверен, искали ли вы решение этой проблемы, но, как кто-то упомянул в комментариях, у вас также есть некоторые проблемы с тем, что вы пытаетесь добавить к этой таблице.
Во-первых, как уже упоминалось, у вас нет объявленной переменной «info». Во-вторых, единственное, что вы извлекаете из Xml, — это дата (строка). Вам не повезет, если вы попытаетесь добавить это в $(‘table’) . Вам нужно будет использовать либо document.createElement, чтобы добавить строку ячейки, либо создать Html-строку, содержащую эту информацию.
ie:
jQuery('table').append(
jQuery(document.createElement('tr')).append(
jQuery(document.createElement('td')).text('your value')
)
);
или
jQuery('table').append('<tr><td>yourvalue</td></tr>');
Ответ №2:
Похоже, что синтаксический анализ этого xml сложен.
Это работает для меня, по крайней мере, в Chrome: var mydata = $entry.find('entry').attr('w:date');
Таким образом, вы можете оставить w\: