[AJAX] Gästebuch - nur laden wenn neuer Beitrag geschrieben wurde

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Hi,

bin gerade dabei mit AJAX ein Gästebuch zu schreiben.

Ich hab die Funktion saveData() und die Funktion loadData().

Wenn ich jetzt einen neuen Beitrag geschrieben habe wird er mit saveData() gespeichert. Und in der Funktion saveData() will ich jetzt noch die Funktion loadData() einfügen. Aber sobald ich diese Funktion einfüge funktioniert die Funktion saveData() nicht mehr. Ich will die Beiträge nämlich nur neu abfragen wenn ein neuer Beitrag geschrieben wurde.

Hier mal etwas Code:

PHP:
function loadData(){
 if (xmlHttp) {
     xmlHttp.open('GET', 'eintraegeholen.php', true);
     xmlHttp.onreadystatechange = function () {
         if (xmlHttp.readyState == 4) {
             document.getElementById("div_tag").innerHTML = xmlHttp.responseText;
         }
     };
     xmlHttp.send(null);
 }
}

function saveData(){
    if (xmlHttp) {
        xmlHttp.open('POST', 'eintragen.php');
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlHttp.send('name='+document.form.name.value);
    }
loadData() //Mit dem hier funktioniert die Funktion nicht mehr.

}
 
Code:
function loadData(){
 if (xmlHttp) {
     xmlHttp.open('GET', 'eintraegeholen.php', true);
     xmlHttp.onreadystatechange = function () {
         if (xmlHttp.readyState == 4) {
             document.getElementById("div_tag").innerHTML = xmlHttp.responseText;
         }
     };
     xmlHttp.send(null);
 }
}

function saveData(){
    if (xmlHttp) {
        xmlHttp.open('POST', 'eintragen.php');
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlHttp.send('name='+document.form.name.value);
        loadData() //Mit dem hier funktioniert die Funktion nicht mehr.
    }

}

Sollte das nicht so sein? Bin mir nicht ganz sicher aber so sollte es gehen ansonsten mache doch folgendes:
Code:
[...]
        if(xmlHttp.send('name='+document.form.name.value) != RETURN_ERROR)
           loadData() //Mit dem hier funktioniert die Funktion nicht mehr.
[...]

Was die funktion bei nicht erfolgen zurückgibt weis ich grad nicht, must Du mal im Manual schaun. Aber so hast noch einen weiteren Vorteil und zwar wird nur geladen wenn der wert auch wirklich eingetragen wurde nicht nur geschrieben und gesendet wurde. Im Else Teil könntest zudem dann noch einen error schreiben ala melden Sie dies bitte dem Support.

Hoffe mal ich hab jetzt keinen Stuss geschrieben, habe schon seit ewigkeiten nix mehr gecodet :-?
 
das es nicht mehr funktioniert ist ganz logisch ;)
dein Ajax-Objekt ist bei dir eine globale Variable, nun heissen in saveData() und in loadData() beidesmal die Variablen gleich, also überschreiben sie sich, da du keine synchronen Requests durchführst, sondern asynchrone, wurden die Daten nocht nicht komplett gesendet als du schon die Anfrage zum Auslesen vorbereitest ;)

strolch, die send()-Methode hat keinen Return, macht ja auch keinen Sinn, was soll sie denn sagen? das Senden muss ja erstmal ausgeführt werden (die 4 Ajax-Statsu-Level), und damit send() etwas zurückgeben könnte, müsste es synchron sein, aber es heisst ja Asynchronous....

mfg ice
 
das es nicht mehr funktioniert ist ganz logisch ;)
dein Ajax-Objekt ist bei dir eine globale Variable, nun heissen in saveData() und in loadData() beidesmal die Variablen gleich, also überschreiben sie sich, da du keine synchronen Requests durchführst, sondern asynchrone, wurden die Daten nocht nicht komplett gesendet als du schon die Anfrage zum Auslesen vorbereitest ;)

mfg ice

Deswegen schreibe ich die Funktion doch ans Ende der Funktion...
Hm..wie muss ich das jetzt abändern...bin noch nich so fit darin.

Danke schonmal :)
 
ajax läuft asynchron, da klappt das so nicht, denn der Request muss nicht ausgeführt worden sein wenn er deine loadData-Funktion erreicht (bitte mit ajax auseinandersetzen ;) )
was du machen kannst, ist die loadData-Funktion in den state 4 reinpacken wenn ajax daten fertig gesendet hat ;)
 
ajax läuft asynchron, da klappt das so nicht, denn der Request muss nicht ausgeführt worden sein wenn er deine loadData-Funktion erreicht (bitte mit ajax auseinandersetzen ;) )
was du machen kannst, ist die loadData-Funktion in den state 4 reinpacken wenn ajax daten fertig gesendet hat ;)

okay, danke für deine antwort :)