2017-01-02 9 views
1

Я использую плагин jQuery Form и ajaxSubmit. Но когда дело доходит до возвращаемого значения, я получаю этот (с двумя пустыми строками впереди, но они здесь отрезаны).Недопустимый XML при возврате AJAX

<?xml version="1.0" encoding="UTF-8"?> 
 
<elements> 
 
<success> 
 
    <value>282</value> 
 
</success> 
 
</elements>

ajaxSubmit вызов имеет типа данных: "XML" и заголовок на возвращении является правильным, но Аякс останавливается с ошибкой "Invalid XML". Я думал, что две пустые строки неверны, но даже обрезка не удалит их. XML-генерация выглядит следующим образом:

$output = new XMLWriter(); 
$output->openMemory(); 
$output->setIndent(true); 
$output->startDocument('1.0', 'UTF-8'); 
$output->startElement("elements"); 

if (isset($theID)) { 
    $output->startElement("success"); 
    $output->startElement('value'); 
    $output->text($theID); 
    $output->endElement(); //value 
    $output->endElement(); 
} 

$output->endElement(); //elements 
$output->endDocument(); 
$xml = $output->outputMemory(true); 
header('Content-type: text/xml; charset=utf-8'); 
print trim($xml); 

У кого-нибудь есть идея, что здесь может быть неправильным?

EDIT: Вот Javascript, но, как это работает хорошо (даже с заголовками, я не показал его в первую очередь):

$('#formNewForm').ajaxSubmit({ 
     dataType: 'xml', 
     beforeSubmit: function() { 
      // something 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      // something 
     }, 
     success: function (responseXML) { 
      // something 
     } 
     }); 
+0

Возможно, вы захотите опубликовать свой JS. – Utkanos

+0

Этот XML проверяет. Пустые строки не должны иметь значения. Пожалуйста, разместите свой javascript-код, который создает запрос и генерирует исключение. –

+0

Вы сняли сгенерированный XML со вкладки «Net» в инструментах разработчика вашего браузера? Если нет, возможно, стоит дважды проверить, что он действительно идентичен. –

ответ

0

Я лгал в комментариях, я сделал обновите свой javascript. Вот мой рабочий код:

<form id="formNewForm" action="ajax-test.php" method="post"> 
    <input type="text" name="name"> 
    <input name="submit" type="submit"> 
</form> 
<script> 
    // bind to the form's submit event 
    $('#formNewForm').submit(function() { 
     // inside event callbacks 'this' is the DOM element so we first 
     // wrap it in a jQuery object and then invoke ajaxSubmit 
     $(this).ajaxSubmit({ 
      dataType: 'xml', 
      beforeSubmit: function() { 
       // something 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       // something 
      }, 
      success: function (responseXML) { 
       alert(responseXML); 
      } 
     }); 

     // !!! Important !!! 
     // always return false to prevent standard browser submit and page navigation 
     return false; 
    }); 
</script> 
+1

странно, этот код (и мой) работает на одном сервере, но не работает на другом. Возможно, это не проблема с кодом, а проблема с сервером. Я вернусь позже, когда узнаю больше. – Andi

0

Решение очень просто, как это не имеет ничего общего со сценарием или сгенерированного XML вообще. Это вызвано закрывающими тегами php («?>»), Используемыми в некоторых включенных php-файлах, когда после него появляется новая строка.