Warten auf alle AJAX-Aufrufe als Show-Dialogfeld

8

Ich arbeite an einer dynamischen Online-Formular-Website. Im Hauptformular habe ich mehrere Unterformen, die dynamisch hinzugefügt und gelöscht werden können.

%Vor%

Für jedes Teilformular binden Sie einen AJAX-Aufruf an die Übergabeschaltfläche des Teilformulars wie folgt:

%Vor%

Also auf dieser Seite kann ich 0 bis 10 Unterformulare abhängig von der Auswahl des Benutzers haben. Ich habe auch eine Haupt-Schaltfläche "Senden" am unteren Rand der Seite, die diese Unterformulare und die Daten des Hauptformulars zusammen übermitteln kann.

%Vor%

Nachdem der Haupt-Submit-Button geklickt wurde, möchte ich ein Ladebild anzeigen und dann ein Dialogfeld anzeigen (ich benutze bootbox.confirm() hier), bis alle AJAX-Aufrufe abgeschlossen sind. In diesem Dialogfeld wird dem Benutzer mitgeteilt, dass das gesamte Formular einschließlich der Unterformulare übermittelt wurde. Aber das Problem ist, dass jeder AJAX-Anruf 2 Sekunden dauern kann und ich weiß nicht, wie viele Anrufe noch ausstehen können. Wie kann ich diesen Hauptübermittlungsknopf schreiben, so dass es:

  1. Zeigen Sie das Ladebild sofort und
  2. an
  3. Verstecke das geladene Bild und zeige das Dialogfeld an, nachdem alle AJAX-Anrufe abgeschlossen sind?
monknom 22.12.2015, 15:51
quelle

5 Antworten

4

Verfolgen Sie, wie viele Unterformen es gibt;

%Vor%

Behalten Sie im Auge, wie viele Formulare eingereicht wurden;

%Vor%

Fügen Sie jedes Mal, wenn ein Formular einreichen soll, zu den $ submittedForms hinzu;

%Vor%

Erstellen Sie einen globalen Zeitgeber, um festzustellen, ob die Anzahl der übermittelten Formulare mit der Gesamtzahl der Unterformulare übereinstimmt. Wenn dies der Fall ist, verberge das Dialogfeld;

%Vor%

Bearbeiten

Sie könnten den globalen Timer überspringen (da dies wahrscheinlich ein paar Millisekunden dauern wird) - fügen Sie den Check stattdessen in Ihren ajax.done ein;

%Vor%     
Lewis 22.12.2015 16:25
quelle
2

Sie möchten .done () verwenden, um Code anzugeben, der warten soll, bis die asynchrone AJAX-Funktion abgeschlossen ist .

%Vor%     
Draco18s 22.12.2015 15:56
quelle
1

Haben Sie den .ajaxStop () Event-Handler ausprobiert?

%Vor%

Überprüfen Sie auch diese Antwort

    
WinK- 22.12.2015 16:00
quelle
0

Ich nehme an, Sie haben 9 Unterformular und 1 Hauptformular. Code für 8 Unterformular wird gleich sein.

Ich benutze hier async: false: Bedeutet nächsten Ajax wird nicht aufgerufen, bis der erste nicht abgeschlossen ist.

Beispielcodeformat:

%Vor%

Setzen Sie einfach die Variable in Ihrem letzten Unterformular, das das 9. Unterformular ist.

%Vor%     
Monty 22.12.2015 18:12
quelle
0

Sie können $.when verwenden, um auf die Ausführung jeder Anforderung zu warten. So etwas sollte dir nahe kommen. Sie sollten im Grunde alle Ajax-Anfragen in einem Array speichern und diese an when als Argumente übergeben.

%Vor%

Hier ist eine sehr ähnliche kleine Demo, die ich gerade erfunden habe: Ссылка

    
Bill Criswell 22.12.2015 18:21
quelle

Tags und Links