• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[GELOEST] JavaScript mehrere Abfragen hintereinander mit warten auf Server

petrei86

Mitglied
Hallo Leute

Ich versuch mich grad in JavaScript bzw. JQuery- Ist eigentlich nicht so meine Welt. Hoffe auf eure Hilfe

Ich muss in einem JavaScript voraussichtlich fünf JQuery "Post" Abfragen ausführen. Jedes mal auf die Serverantwort warten, entscheiden ob zur nächsten oder ob Alert ausgeben.

Was empfehlt Ihr mir, wie ich das auflege damit der Code übersichtlich bleibt und ich nicht alle 5 ineinander verschachteln muss?

Gruss Petrei
 

threadi

Moderator
Teammitglied
Moderator
Bau für jede Abfrage eine einzelne Funktion. Die rufst Du dann jeweils als Callback der vorherigen Abfrage auf.
 

petrei86

Mitglied
Danke für deine Rückmeldung.

Nun muss ich in der Funktion zurück geben ob diese erfolgreich war oder nicht. Das versuche ich mit return true/false zu lösen.

Code:
function MeineFunktion() {
    $.post(...., function(Feedback) {
        if(Feedback.Short == "Ok") {
            return true;
        } else {
            return false;
        }
    });
}

if(MeineFunktion()) {
    alert("Hat funktioniert");
} else {
    alert("Hat nicht funktioniert");
}

Warum funktioniert dieses Beispiel nicht?

Gruss Petrei
 

Sempervivum

Senior HTML'ler
Häufige Frage. Das Problem ist, dass die return-Anweisung nicht für die Funktion MeineFunktion wirkt sondern die anonyme Callback-Funktion function(Feedback) und dort ins leere geht. Ich kenne leider keine andere Lösung als alle Aktionen, die die Antwort vom Server benötigen, ebenfalls in der Callback-Funktion zu erledigen.
Häufig wird versucht, die Serverantwort oder etwas davon Abgeleitetes in einer globalen Variablen zu speichern und direkt nach der Ajax-Anfrage darauf zuzugreifen aber das ist ebenfalls zum Scheitern verurteilt, weil Ajax asynchron arbeitet, d. h. es braucht eine kurze Zeit bis die Antwort vom Server da ist und beim Zugriff auf die Variable ist das i. allg. noch nicht der Fall.
 

Sempervivum

Senior HTML'ler
Ich habe da noch etwas weiter drüber nachgedacht. Eigentlich bin ich nicht so der Freund von async-await aber in diesem Fall könnte es hilfreich sein, die Verschachtelung zu umgehen und statt dessen die Ajax-Anforderungen einfach hintereinander zu notieren. Dieser grobe Testcode funktioniert jedenfalls, auch wenn ich statt console.log alert verwende:
Code:
async function outerFunc() {
            response1 = await fetch('zweirb.html');
            text1 = await response1.text();
            console.log(text1);
            response2 = await fetch('zoomdiv.html');
            text2 = await response2.text();
            console.log(text2);
            response3 = await fetch('youtube-api.html');
            text3 = await response3.text();
            console.log(text3);
        };
        outerFunc();
 
Werbung:
Oben