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:
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%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%Haben Sie den .ajaxStop () Event-Handler ausprobiert?
%Vor%Überprüfen Sie auch diese Antwort
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% 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.
Hier ist eine sehr ähnliche kleine Demo, die ich gerade erfunden habe: Ссылка
Tags und Links javascript jquery ajax bootbox