3 Stimmen

Ajax - responseText funktioniert, aber responseXML ist null

Ich versuche mein erstes AJAX und habe ein Problem mit meiner Xml-Empfangsfunktion. Ich alarmiere responseText und ich kann sehen, die xml von meinem Server zurückgegeben, aber wenn ich versuche und erhalten responseXML ich null und den Fehler erhalten.

Hier ist die php-Funktion, die meine xml erstellt

  header('Content-type: application/xml');
    echo("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
    echo("<results>");
    echo("<table><![CDATA[tablereererere]]></table>");
    //echo("<ratedTable>".$_POST['ratedTable']."</ratedTable>\n");
    //echo("<table>".$_POST['table']."</table>\n");
    //echo("<post_id>".$_POST['post_id']."</post_id>\n");
    //echo("<user_id>".$_POST['user_id']."</user_id>\n");
    //echo("<rating>".$_POST['rating']."</rating>\n");
    echo("</results>");

Und hier ist meine Javascript-Funktion, die die zurückgegebene xml verarbeitet

function ajaxReceiver(http_request) {

    //this function continues to run until a result is returned and then it creates the new div
    if(http_request.readyState == 4) {

      response_xml = http_request.responseXML;
      response_text =  http_request.responseText;

      alert(response_text);
      alert(response_xml.getElementsByTagName("table")[0].textContent);
      //document.getElementById('floatingNotification').innerHTML = response_text;
       // alert(http_request.responseXML.getElementsByTagName("table")[0].textContent);
      //ratedTable = responseXML.getElementsByTagName("table").value;
      //alert(ratedTable);
      //message = response.getElementsByTagName('table')[0].textContent;
      //alert(message);
     //alert(message);
//this response contains the xml document that was returned by the php function.You can get any values out of the xml document and 
//use javascript dom to manipulate the contents on the page

    }
}

0 Stimmen

Ich bin mir sicher, dass es sich nur um einen kleinen dummen Fehler handelt, aber ich schaue mir dieses Skript schon seit Stunden an und fange an zu schielen

0 Stimmen

Ich habe die Nase voll von ajax arrragggadfereferfe293847(*&(*&&^!!!!!

0 Stimmen

Ein weiterer Vorschlag, der mir vorhin nicht aufgefallen ist - versuchen Sie Content-Type: text/xml anstelle von application/xml und schauen Sie, ob das etwas bringt.

2voto

wajiw Punkte 12035

Es könnte daran liegen, dass Sie, obwohl Sie den Inhaltstyp richtig einstellen, eine <xml Tag am Anfang Ihrer Antwort. Außerdem schließen Sie Ihr letztes Tag nicht richtig ab. Dies sollte funktionieren:

echo("<?xml version='1.0'?>");
echo("<results>");
echo("<ratedTable>".$_POST['ratedTable']."</ratedTable>");
echo("<table>".$_POST['table']."</table>");
echo("<post_id>".$_POST['post_id']."</post_id>");
echo("<user_id>".$_POST['user_id']."</user_id>");
echo("<rating>".$_POST['rating']."</rating>");
echo("<message>$message</message>");
echo("</results>");

Weitere Informationen über die Definition von XML finden Sie hier: http://www.w3.org/TR/REC-xml/#sec-prolog-dtd

0 Stimmen

Ich habe die Positionierung der Anführungszeichen geändert. Können Sie es noch einmal versuchen? Wenn das nicht funktioniert, können Sie den AntwortText posten?

0 Stimmen

Wie führen Sie eigentlich die Fehlersuche durch? Wenn Sie die Zeile mit der Tabelle verwenden, haben Sie textContent falsch geschrieben.

0 Stimmen

Zur Fehlersuche verwende ich die Chrome-Entwicklertools und alarmiere den responseText und den textContent

1voto

Dereleased Punkte 9671

Sie schließen den übergeordneten Knoten nicht ordnungsgemäß ( </results> no <results/> ) und Sie sollten (nach der Bereinigung) alle POSTDATA in <![CDATA[...]]> Tags, um sicher zu sein. Vergewissern Sie sich, dass sie auch in UTF8 kodiert sind (siehe utf8_encode() )

EDITAR: und was wajiw über die <?xml version="1.0" encoding="UTF-8" ?> Tag am Anfang.

Bearbeiten: Beispiel für die Verwendung von CDATA-Blöcken

<?xml version="1.0" encoding="UTF-8" ?>
<myNode>
    <myData><![CDATA[
        Now I just throw in my data, for fun and profit!
        This way I can use special, reserved characters like <, > and &!
    ]]></myData>
</myNode>

Erneut bearbeiten:

Warum nicht Content-Type: text/xml , NICHT application/xml , einen Versuch?

0 Stimmen

Können Sie erklären, was postdata ist? Ist das dieser Teil <?xml version='1.0'?>

0 Stimmen

Ok, ich habe diese Änderungen vorgenommen und erhalte das gleiche Ergebnis

0 Stimmen

Können Sie bitte die XML-Ausgabe veröffentlichen? Außerdem verwenden Sie immer noch nicht CDATA Blöcke, und das könnte je nach Inhalt dieser Variablen wichtig sein. POSTDATA sind die per POST gesendeten Daten (d.h. der Inhalt von $_POST ); Bereinigung, z. B. durch die Verwendung von htmlentities() o htmlspecialchars() verhindert ungültige Zeichen sowie einige Arten von XSS-Angriffsvektoren.

1voto

karit Punkte 19

Die Antwort ist, die asynchrone Eigenschaft in der Funktion "open()" auf false zu setzen. Etwa so:

ajaxObject.open("POST", "my_XML_Generator.php", false);
ajaxObject.setRequestHeader("Content-type", "text/xml");
ajaxObject.send();

0 Stimmen

Nein, ist es nicht. Synchrone Anfragen sind immer falsch.

0voto

Ray Punkte 6679

Ich hatte das gleiche Problem und konnte es erst lösen, als ich meine Ergebnisse in Unterknoten einordnete, z. B.

header("Content-Type: text/xml; charset=utf-8");
echo("<?xml version='1.0' encoding='utf-8'?>\n");
echo("<summary>$summary</summary>\n");
echo("<content>$content</content>\n");

hat bei mir aus unerfindlichen Gründen nicht funktioniert, aber das hier schon:

header("Content-Type: text/xml; charset=utf-8");
echo("<?xml version='1.0' encoding='utf-8'?>\n");
echo("<page>\n");
echo("    <summary>$summary</summary>\n");
echo("    <content>$content</content>\n");
echo("</page>\n");

Mein Code zum Abrufen der Antwort lautet

function retrieveRequest(title)
{
    if (_xmlRequest.readyState == 4 && _xmlRequest.status == 200)
    {
        var xmlResponse = _xmlRequest.responseXML;
        _divSummary.innerHTML = xmlResponse.getElementsByTagName("summary")[0].textContent;
        _divContent.innerHTML = xmlResponse.getElementsByTagName("content")[0].textContent;
    }
}

0voto

axon111 Punkte 1

Dieser Fehler ist unserem Team schon einmal passiert, und es hat lange gedauert, bis wir erkannt haben, dass das Problem in unseren vom Server zurückgegebenen XML-Daten liegt. Insbesondere war das PHP-Skript, das die XML-Zeichenfolge für die Rückgabe generierte, der Übeltäter.

Meine Lösung war Leerzeichen am Anfang des PHP-Skripts entfernen . Ich meine, dass alle Leerzeichen, Zeilenumbrüche und/oder Tabulatoren am Anfang des Skripts entfernt werden müssen, so dass der erste Teil des Skripts die <?php Tag selbst. Es stellte sich heraus, dass die <?PHP Tag war nicht das erste in der ersten Zeile meines PHP-Skripts; irgendwie habe ich meinen Code in der zweiten Zeile begonnen und die erste Skriptzeile war einfach leer.

Es hat mich wahnsinnig gemacht und es hat einige Zeit gedauert, bis ich es herausgefunden habe. Es ist sehr einfach und leicht zu versuchen, wenn alles andere fehlschlägt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X