AJAX Rationalisierungstechniken?

8

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

    
Vigrond 14.12.2011, 13:10
quelle

7 Antworten

7

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.

  1. Stoppt die Warteschlange, wenn ein Fehler auftritt
  2. Die Warteschlange wird fortgesetzt, sobald der Erfolg eintritt
  3. Hat Event-Handler für Erfolg / Fehler mit Kontext

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.

    
Jason Sebring 19.12.2011, 21:21
quelle
6

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.

    
James 14.12.2011 13:23
quelle
2

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.

    
Alexander Yezutov 14.12.2011 13:15
quelle
2

Ich schlage vor, Sie jquery Warteschlange, es hilft Ihnen, alles in die Warteschlange, wenn es Ajax Anfrage oder Animation Warteschlange ...

    
pravin 18.12.2011 03:29
quelle
2

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.

    
brandwaffle 22.12.2011 00:45
quelle
2
  • Haben Sie eine zentrale Anfrage Q.
  • Und ein versteckter Spinner über allem.

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.

    
PicoCreator 22.12.2011 02:49
quelle
2

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;)

    
Starx 23.12.2011 05:42
quelle

Tags und Links