Ajax ResponseText und alert

maythefunkbewitu

Grünschnabel
Mahlzeit zusammen,

eine Seite nutzt eine z.T. statisch, z.T. dynamisch generiert Tabelle, d.h. ursrpüngliche Daten werden mittels eines php-Skriptes aus einer DB geladen und angezeigt. Zur Laufzeit können die Benutzer neue Zeilen zur Tabelle hinzufügen und diese mit Daten füllen. Das Speichern der Tabellendaten läuft per javascript und XMLHttpRequest. In einer Schleife werden entsprechende Statements erzeugt und über ein weiteres PHP-Skript an die Datenbank gesendet. Es wird dabei zwischen neu und alten Einträgen unterschieden und entsprechend ein Update- oder Insert-Statement erzeugt.

Bis hier hin alles schön und funktionsfähig. Problematisch wird es bei dem Versuch, von dem Skript, das die Statements ausführt, irgendetwas zurückzubekommen. Speziell interessiert mich die ID der per Insert erzeugten Zeilen.

Die Requests werden synchron abgesandt, das DB-Skript führt lediglich das Statement aus und gibt die ID aus. Diese sollte anschließend über die responseText-Eigenschaft verfügbar sein. Ist sie aber nicht.

Füge ich jedoch ein alert mit dem responseText ein, zeigt dies zwar ein leeres Fenster. Anschließend ist der Wert jedoch vorhanden. Mal ein wenig Pseudo-Code:

Code:
var http = new XMLHttpRequest();
http.open('GET', url, 'false');
http.send(null);

if (http.responseText.length != 0){
...
}

http.responseText ist an dieser Stelle immer leer, es wird nicht in die if-Anweisung gesprungen. Das aufgerufene Skript wird jedoch ausgeführt, die neuen Einträge sind in der DB vorhanden. Ein eingefügtes alert:


Code:
var http = new XMLHttpRequest();
http.open('GET', url, 'false');
http.send(null);

alert(http.responseText);

if (http.responseText.length != 0){
...
}

Alert zeigt ein leeres Fenster, aber plötzlich wird der Code nach dem if ausgeführt.
Ich habe auch probeweise zwei alerts hintereinander gestellt. Das erste bringt ein leeres Fenster, das zweite den gewünschten Wert.

Das alert an der Stelle zu belassen ist keine Option, also falls jemand eine Idee hat.

Achja, der Code wurde bislang nur in Firefox 3 getestet.

Grüße
Torsten
 
Moin Torsten,

entferne mal die Gänsefüsse bei dem false, denn mit denen ist das kein boolescher Wert false sondern ein String false, und dessen boolesche Entsprechung ist true.

Kurzer Test:
Code:
<script type="text/javascript">
<!--
alert(new Boolean(new String('false')));
//-->
</script>

Der Request läuft also asynchron, weshalb http.responseText so kurz danach nichts liefert.
Während du die alert-Box siehst, läuft der Request im Hintergrund weiter, weswegen danach alles wie gewünscht funktioniert(aber eben nur mit dem alert)

Ansonsten: Der Funk ist mit mir :)
 
Zurück