Warten Sie, bis AJAX abgeschlossen ist, bevor Sie von der Funktion zurückkehren.

8

Ich habe folgendes

%Vor%

Ich habe eine Funktion, die etwas Ajax ausführt, und gibt dann wahr oder falsch zurück, abhängig davon, ob der Ajax erfolgreich war oder nicht. Diese Ajax-Funktion rufe ich von mehreren Stellen in meinem Code auf.

Da die Funktion endet, bevor der Ajax endet, gibt sie immer false zurück. Wie vermeide ich das?

Ich habe etwas gelesen, was darauf hindeutet, dass ich ein return $.ajax() in meiner Funktion mache und dann die Funktionen .done() und .fail() in meine Funktionen doSomething() und doSomethingElse() verschiebe. In meiner .done() -Methode mache ich jedoch einen BUNCH der Berechnung. Viel Code. Das Problem ist also, dass wenn ich die Funktion .done() auf meine anderen Funktionen verschiebe, ich eine Menge Code vervielfältige.

Wie vermeide ich das? Wickeln Sie einfach die Berechnung in ihre eigene Funktion und rufen Sie sie wo nötig auf?

    
Jake Wilson 27.08.2014, 06:25
quelle

4 Antworten

9

Strukturieren Sie Ihren Code so, dass Callbacks anstelle von Returns verwendet werden, wie dies ...

%Vor%     
Soren 27.08.2014, 07:02
quelle
3

Techincally können Sie Ajax synchronous wie folgt machen:

%Vor%

Aber das wird nicht empfohlen (nur für wirklich wirklich spezifische Dinge).
Andernfalls verwenden Sie einfach callbacks , wie Sie in diesem Beispiel sehen können:

%Vor%

Lesen Sie mehr hier .

    
Amir Popovich 27.08.2014 06:35
quelle
1

NIEMALS return zusammen mit Ajax , es wird nie funktionieren. Verwenden Sie Ajax success function:

%Vor%     
Justinas 27.08.2014 06:30
quelle
1

Es wird nicht funktionieren, während sich Ihr Ajax im asynchronen Modus befindet ( async: false ). Versuchen Sie, Ihren Code auf diese Weise zu strukturieren:

%Vor%

Damit bleibt Ihr Hauptrechenblock doABuncnchOfComputation() intakt und für jede asynchrone Operation zugänglich.

Wenn Sie den Ajax-Modus auf synchron einstellen, wird der Browser von einer beliebigen Ausführung an gehalten, während die Netzwerkübertragung im aktiven Zustand ist. Aufgrund möglicher Netzwerkinstabilität kann dies zu einer "schlechten" Benutzererfahrung führen - der Browser kann hängen bleiben, die Seite ist inaktiv und reagiert nicht, während Ajax sendet / empfängt oder auf Daten wartet. Es ist höchst unzuverlässig und entmutigend.

    
BlitZ 27.08.2014 06:33
quelle

Tags und Links