JQuery / JS: Asynchrones Laden von Daten abwarten

SonMiko

Erfahrenes Mitglied
Die Überschrift benennt eigentlich genau mein Problem:
Ich rufe in einer Funktion eine andere auf, welche dafür verantwortlich ist,
dass Daten geladen und als JSON Objekt zurückgeliefert werden.
Blöderweise ist die Rückgabe beim sofortigen Aufruf immer undefined,
und ich tippe mal darauf dass das daran liegt, dass zu dem Zeitpunkt der Ausgabe,
die Rückgabe noch gar nicht erfolgt ist.

Wie kann ich in meiner Funktion nun sagen: Warte bis die Rückgabe der anderen Funktion
ein Objekt ist (und nicht undefined) - oder gibt es grundsätzlich Standardfunktionen
die prüfen ob geladen wurde oder nicht?

Ich erinnere mich an diese Problematik als ich noch mit Flash entwickelt habe.
Hier gab es einen Kontrollaufruf der sich "isLoaded" nannte...
Schön wäre natürlich wenn ich in meiner Lade-Funktion, das weitermachen der anderen Funktion
unterbinden kann, bis zuende geladen wurde...

Hier mal ein Ausschnitt vom Code:

Javascript:
function irgendwas(){
var meineDaten = getData();
alert(meineDaten.ausgabe1);
}

function getData(){
$.post("getdata.php",{
            },function(data){
                var dataObj = $.parseJSON(data);
                return dataObj;
        });
}

irgendwas();

Das PHP Script funktioniert, und ich hab auch schon innerhalb der Funktion getData ein Alert auf dataObj.ausgabe1 gemacht, was die korrekten Daten ausgibt.

Für Ideen wäre ich sehr dankbar...

Ich habe auch bereits vor den Ablauf der anderen Funktion ein $("body").ajaxComplete(); gesetzt und den Rest der Funktion als Callback definiert, was leider auch nicht funktionierte.

Ist der Aufruf meineDaten.ausgabe1 eventuell falsch oO - wenn ich doch direkt das JSON Objekt zurückliefere****?
 
Zuletzt bearbeitet von einem Moderator:
Hm okay - die Lösung war eigentlich denkbar einfach:
Anstatt des Shorthands $.post(), nutze ich nun $.ajax() und setze den Parameter async auf false.
Dadurch wartet das Script und die Anfrage wird nicht asynchron ausgeführt - genau was ich brauchte.
 
Das Problem dabei ist, dass das JS dann quasi blockiert ist, während du wartest kannst du nichts anderes machen. Vielleicht setzt du Flags für deine Anfragen, vlt kannst du es mal mit Events probieren etc. Hatte das Problem auch mal und keine richtig gute Lösung gefunden. Womöglich ist das ja auch ok für dich.
 

Neue Beiträge

Zurück