Я создаю XML-документ в jQuery следующим образом:
var xmlDocument = $('<xml/>'); var foo = $('<foo/>'); var bar = $('<bar/>'); foo.append(bar); xmlDocument.append(foo);
и попытайтесь перенаправить его на сервер.
$.ajax({ url : 'js/foobar.php', type : 'POST', precessData : false, contentType : 'text/xml', data : xmlDocument, sucess : function( data ) { alert('success'); }, error : function() { alert('failed to send ajax request'); }, complete : function() { alert('ajax request completed'); } });
Даже если сервер echos только «foo», я получаю alert('ajax request completed')
а не alert('success')
. Что я делаю не так? Является ли это способом создания XML-документа или как его перенаправить на сервер?
Запрос ajax без XML-документа отлично работает, и я возвращаю «foo».
ОБНОВЛЕНИЕ # 1
После изменения precessData to processData и успеха для успеха я получаю сообщение об ошибке, которое failed to send ajax request
диалоговому окну failed to send ajax request
.
Когда я изменяю параметр данных в методе ajax, чтобы
$.ajax({ ... data : { data: xmlDocument }, ... });
Я также получаю, что failed to send ajax request
диалог failed to send ajax request
.
Код на стороне сервера должен быть прекрасным, потому что это только
<?php echo 'foo'; ?>
ОБНОВЛЕНИЕ # 2
Я преобразовал строку, как в ответе Андреасала
// Convert to string instead of DOM Elements xmlDocument = $("<wrap/>").append(xmlDocument).html(); // Url encode the string xmlDocument = encodeURIComponent(xmlDocument);
но я все равно получаю одинаковое диалоговое окно ( failed to send the ajax request
). Поэтому я подумал, что ошибка может быть в моем XML-документе и переписать мой XML-документ, используя код snipplet из ответа AndreasAL.
xmlDocument = $('<xml/>'); foo = $('<foo/>').appendTo(xmlDocument); bar = $('<bar/>').appendTo(foo);
Все-таки такое же поведение.
Поэтому я снова проверил свой XML-документ и распечатал его в диалоговом окне, и все выглядит нормально.
У меня заканчиваются идеи, где ошибка может быть …
РЕДАКТИРОВАТЬ:
У вас есть тип-o, это не precessData
это processData
$.ajax({ url : 'js/foobar.php', type : 'POST', precessData : false, // change to processData
и снова в sucess
крике ведьма
Пытаться:
var xmlDocument = $('<xml/>'), foo = $('<foo/>').appendTo(xmlDocument), bar = $('<bar/>').appendTo(foo);
// Convert to string instead of DOM Elements xmlDocument = $("<wrap/>").append(xmlDocument).html(); // Url encode the string xmlDocument = encodeURIComponent(xmlDocument); $.ajax({ url : 'js/foobar.php', type : 'POST', processData : false, contentType : 'text/xml', data : xmlDocument, success : function( data ) { alert('success'); }, error : function() { alert('failed to send ajax request'); }, complete : function() { alert('ajax request completed'); } });
Вы используете объект jQuery через весь процесс.
Напишите свой XML, как это, объединив строку вместе. Не сделать их объектами DOM.
var xmlDocument = '<xml/>'; xmlDocument += '<foo/>'; xmlDocument += '<bar/>';
Затем опубликуйте его, как это
$.ajax({ url : 'js/foobar.php', type : 'POST', precessData : false, contentType : 'text/xml', data : { data: xmlDocument //wrapped inside curly braces }, // Here is your spelling mistake success : function( data ) { alert('success'); }, error : function() { alert('failed to send ajax request'); }, complete : function() { alert('ajax request completed'); } });
Наконец, я решил преобразовать XML-документ и отправить его как строку на сервер.
$xmlString = $(xmlDocument).html();
В связи с тем, что мне нужно хранить только полученные данные, не имеет значения, если я верну его в виде строки или xml.
Я только должен был изменить свой запрос ajax, теперь все работает отлично.
$.ajax({ url : 'js/foobar.php', type : 'POST', data : 'data=' + xmlString, success : function( data ) { alert(data); }, error : function() { alert('failed to send ajax request'); }, complete : function() { alert('ajax request completed'); } });
Я думаю, что у вас есть ошибка в вашем коде на успех
$.ajax({ url : 'js/foobar.php', type : 'POST', precessData : false, contentType : 'text/xml', data : xmlDocument, success : function( data ) { alert('success'); }, error : function() { alert('failed to send ajax request'); }, complete : function() { alert('ajax request completed'); } });
используйте $ .parseXML для управления XML, вы обрабатываете xml, как если бы он был html
использовать это:
data : { xml: xmlDocument }
Значениям по умолчанию требуется ключ