2017-01-02 2 views
1

Ich verwende jQuery Form Plugin und ajaxSubmit. Aber wenn es um den Rückgabewert geht, bekomme ich diesen (mit zwei leeren Reihen davor, aber sie wurden hier abgeschnitten).Ungültiger XML-Code, während AJAX-Rückgabewert gültig ist

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

Der ajaxSubmit Anruf einen Datentyp hat: "xml" und den Header auf Rückkehr ist richtig, aber die Ajax stoppt mit einem "Ungültige XML" Fehler. Ich dachte, die zwei Leerzeilen sind falsch, aber selbst ein Trimmen wird sie nicht entfernen. XML-Generation sieht wie folgt aus btw:

$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); 

Wer eine Idee hat, was möglich hier falsch sein könnte?

EDIT: Hier ist die Javascript, aber wie es gut geht (auch mit Header, ich habe es nicht in erster Linie zeigen):

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

Sie könnten Ihren JS veröffentlichen möchten. – Utkanos

+0

Das XML validiert. Leerzeilen sollten keine Rolle spielen. Bitte posten Sie Ihren JavaScript-Code, der die Anfrage erstellt und die Ausnahme auslöst. –

+0

Haben Sie den generierten XML-Code von der Registerkarte "Net" in den Tools Ihres Browsers entfernt? Wenn nicht, lohnt es sich zu überprüfen, dass es wirklich identisch ist –

Antwort

0

ich in den Kommentaren, log, ich machte eine Aktualisieren Sie Ihr Javascript. Hier ist mein Arbeitscode:

<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

seltsame Sache, dieser Code (und meins) arbeiten auf einem Server, aber nicht auf einem anderen arbeiten. Vielleicht ist dies kein Code-Problem, sondern ein Server-Problem. Ich werde später wiederkommen, wenn ich mehr erfahren habe. – Andi

0

Die Lösung ist ganz einfach, da es nichts mit dem Skript oder dem generierten XML überhaupt zu tun. Es wird von php-schließenden Tags ("?>") Verursacht, die in einigen enthaltenen PHP-Dateien verwendet werden, wenn eine neue Zeile dahinter steht.