Ответ 1
Мне нужен фактический XML как строка
Вы хотите, чтобы это был обычный текст вместо XML-объекта? Измените dataType
от 'xml'
до 'text'
. Дополнительную информацию см. В $. Ajax documentation.
Я попытался и не смог выяснить, как получить всю XML-строку из XMLDocument, возвращаемого GET. На SO есть много вопросов о том, как найти или заменить определенные элементы в объекте, но я не могу найти ответа на вопрос о том, как получить весь документ в виде строки.
Пример, с которым я работаю, - это здесь. "Делать что-то с xml" - часть, где я сейчас. У меня такое чувство, что это должно быть действительно тривиально, но я не знаю, как это сделать. Есть ли "xml.data()" или аналогичный, который может быть использован для этой цели?
$.ajax({
url: 'document.xml',
type: 'GET',
dataType: 'xml',
timeout: 1000,
error: function(){
alert('Error loading XML document');
},
success: function(xml){
// do something with xml
}
});
Вариант использования заключается в том, что я хочу передать XML-флеш-плагин, и для этого мне нужен фактический XML в виде строки.
Мне нужен фактический XML как строка
Вы хотите, чтобы это был обычный текст вместо XML-объекта? Измените dataType
от 'xml'
до 'text'
. Дополнительную информацию см. В $. Ajax documentation.
Если вы хотите оба, получите ответ как XML-документ и как строку. Вы должны иметь возможность делать
success: function(data){
//data.xml check for IE
var xmlstr = data.xml ? data.xml : (new XMLSerializer()).serializeToString(data);
alert(xmlstr);
}
Если вы хотите, чтобы это как строка, почему вы указываете dataType:xml
, то не подходит ли dataType:text
?
Вы также можете легко преобразовать объект xml в строку, в java script:
var xmlString = (new XMLSerializer()).serializeToString(xml);
Если вам нужна только строка, представляющая xml, возвращаемый из jquery, просто установите свой тип данных как "текст", а не пытайтесь проанализировать xml обратно в текст. Следующее должно просто дать вам исходный текст обратно из вашего вызова ajax:
$.ajax({
url: 'document.xml',
type: 'GET',
dataType: 'text',
timeout: 1000,
error: function(){
alert('Error loading XML document');
},
success: function(xml){
// do something with xml
}
});
Хотя на этот вопрос уже был дан ответ, я хотел бы указать на предостережение: при извлечении XML с помощью jQuery с Internet Explorer вы ДОЛЖНЫ указать тип контента как "text/xml" (или "application/xml" ) или иначе вы не сможете анализировать данные, как если бы это был XML с помощью jQuery.
Возможно, вы думаете, что это очевидная вещь, но это поймало меня при использовании Mozilla/Chrome/Opera вместо IE. При извлечении "строки" XML с типом содержимого "текст" все браузеры, кроме IE, все равно позволят вам анализировать эти данные (с помощью селекторов jQuery), как если бы это был XML. IE не будет вызывать ошибку и просто не вернет никаких результатов в инструкцию выбора jQuery.
Итак, в вашем примере, если вам нужна только строка-сериализованная версия XML и не ожидает, что jQuery сделает какой-либо выбор в XML DOM, вы можете установить тип содержимого в "текст", Но если вам также нужно разбирать XML с помощью jQuery, вам нужно будет написать настраиваемую подпрограмму, которая сериализует XML в строку для вас, или же получить версию XML с типом содержимого "xml".
Надеюсь, что это поможет кому-то:)
Вы можете получить собственный объект XMLHttpRequest, используемый в запросе. В то время, когда я отправляю этот ответ, jQuery docs заявляют несколько способов сделать это.
Один из них - через третий аргумент обратного вызова:
success: function(xml, status, xhr){
console.log(arguments);
console.log(xhr.responseXML, xhr.responseText);
console.log('Finished!');
}
Для полного примера: https://jsfiddle.net/44m09r2z/