Intereting Posts
PHP Неустранимая ошибка: класс HttpRequest не найден Странные символы в ответе XML от API Google Weather API Как получить информацию сертификата SSL с помощью node.js? Точная отчетная ссылка от платежей, сделанных с помощью PayPal в Google Analytics ZF2 Тестирование: сбойный код ответа «302», фактический код состояния «500», Заголовок не будет перенаправлен при передаче через ajax Yii2 и сохранение данных в базе данных как UTC Найден PHP-функция для абсолютного пути и любопытно, как это работает получить json массив из удаленного csv в php Хранимая процедура MySQL вызвала «команды не синхронизированы» PHP, Regex и новые строки Преобразование ответа API-интерфейса Stripe для JSON с использованием библиотеки stripe-php Разбор вывода команды «верхний» (оболочка) с помощью PHP PHP Создание многомерного массива из массива с реляционными данными Laravel 5.2 Избегайте общей папки и открывайте ее прямо из корня в localhost

Отправка XML через AJAX

Я создаю 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

http://api.jquery.com/jQuery.parseXML/

использовать это:

 data : { xml: xmlDocument } 

Значениям по умолчанию требуется ключ