Meine Frage ist ein bisschen abstrakt.
Wir sind alle mit AJAX Preloader / Spinner vertraut, die auftauchen, wenn eine AJAX-Anfrage gestellt wird. Meine Frage ist, wie vermeiden Sie diese?
Nehmen Sie zum Beispiel eine sortierbare Liste. Wenn ein Benutzer Elemente zurückzieht und löscht, um sie zurückzustellen, wird ein AJAX-Aufruf durchgeführt, um die Bestellung zu aktualisieren.
Vorher würde ich einen Vollbild-AJAX-Spinner öffnen, um zu verhindern, dass der Benutzer etwas unternimmt, bis der AJAX-Anruf beendet ist.
Meine Frage ist, wie würde ich den AJAX-Spinner vermeiden und Ajax-Anfragen "straffen", um sicherzustellen, dass ein Benutzer 20 Ajax-Anfragen in zwei Sekunden einleitet, damit sie in der richtigen Reihenfolge ausgeführt werden?
Ich brauche keine Code-Beispiele, nur akzeptierte oder beliebte Techniken / Ideen. Oder wenn ich hier völlig daneben liege.
Danke
update
Verwenden Sie stattdessen die asynchrone JavaScript-Bibliothek , um das zu erreichen, was Sie möchten
alt unter
Bisher gute Antworten in Bezug auf die Verwendung eines Arrays oder einer Warteschlange, um sicherzustellen, dass sie einzeln geladen und zurückgegeben werden. Ich würde den Spinner ganz ähnlich wie gmail eliminieren und den Benutzer nur bei Bedarf benachrichtigen. Es macht keinen Sinn, den Benutzer über all diese Spinner-Deals zu belästigen. Sie sehen sowieso nur aus wie kleine Roboterlöcher. Hier ist ein Code, den ich ausgetüftelt habe.
Da ich ein Nicken darüber habe, werde ich seine Eigenschaften erklären.
Ich schreibe Plugins, also ist das eine Idee, die eines Plugins würdig ist? Ich glaube nicht, aber du weißt es nie.
%Vor%Und du bist fertig.
Sie können einen "ajax request manager" erstellen, der ausstehende ajax-Anfragen in eine Warteschlange stellt (und möglicherweise zusammenbündelt). Ich habe eine komplexe Anwendung mit vielen ajax-aktualisierbaren Steuerelementen, ich zeige Spinner nur über die Steuerelemente, die aktualisiert werden. Da Ihre ziehbare Liste nur Daten auf dem Server aktualisiert, können Sie wahrscheinlich ohne Spinner davonkommen.
Eine der Optionen könnte eine Art Requests-Queue auf dem Client sein. Sobald der Benutzer zwei Elemente sortiert hat, wird ein Element zur Warteschlange hinzugefügt und beginnt mit der Ausführung. Wenn eine andere Sortierung vor dem Abschluss des ersten Aufrufs stattfindet, wird sie in die Warteschlange gestellt und nach dem ersten Abschluss ausgeführt.
UPDATE:
Sie sollten sicher einen Fall behandeln, wenn eine synchrone Anfrage durchgeführt wird. Zu diesem Zeitpunkt sollten alle Ajax-Anfragen irgendwie in einem versteckten Feld (nur eine Idee) gespeichert werden und von dem Server vor der synchronen Anfrage selbst verarbeitet werden.
Diese Antwort ist ein wenig abstrakt, aber werfen Sie einen Blick auf das jQuery Deferred-Objekt: Ссылка
Es könnte in Ihrer Situation hilfreich sein, da es dem AJAX-Aufruf im Prinzip einige Zustandsinformationen hinzufügt, die Sie nach Belieben lesen / aktualisieren können.
Zentrale Anfrage Q Mit einem zentralen Array hält das temporäre alle Anfragen, daher wäre der Peso-Code so etwas wie ...
%Vor%Sie müssen wahrscheinlich ein paar Fehler fangen / wiederholen, aber Sie bekommen die ungefähre Idee.
Globaler Spinner Fange einfach an, die obere Spinnerin bei Bedarf zu falten und verblasse sie, wenn sie nicht benötigt wird.
Ist das nicht genau, warum gibt es eine Option async
in jquery?
Verwenden Sie async: true
, um die Anfrage in die Warteschlange zu stellen.
Spinner werden beibehalten, um zu vermeiden, dass dieselbe Anfrage immer wieder gesendet wird . Wie bei einem Fall, bei dem es eine Option zum Aktivieren und Deaktivieren einer Funktion gibt ... wenn ein Benutzer erneut auf dieselbe Schaltfläche klickt, senden Sie selbe Anfrage immer wieder. Verwenden Sie in diesen Fällen nur Spinner.
Eine große Kiste auftauchen, um den Zugriff auf die ganze Seite zu vermeiden ... ist nur eine dumme Idee (nichts für ungut).
Verwenden Sie Spinner, um die spezifischen Elemente .. die irgendwie bearbeitet oder manipuliert wird. Verwenden Sie für die Anfrage einfach async ...
CASE GESCHLOSSEN;)
Tags und Links javascript jquery ajax