Was ist eine versteckte AJAX-Anfrage?
Ich habe eine Zunahme der Verwendung von versteckten AJAX-Anforderungen festgestellt, mit denen die Aktion eines Benutzers augenscheinlich sofort ausgeführt wird. Ich werde diese Art von AJAX-Anforderung als nicht blockierend bezeichnen. Es handelt sich um eine AJAX-Anforderung, ohne dass der Benutzer davon Kenntnis hat, dass sie ausgeführt wird, sie wird im Hintergrund ausgeführt und der Vorgang ist stumm ( es gibt keine ausführlichen Informationen zum erfolgreichen Abschluss des AJAX-Aufrufs ). Das Ziel ist es, die Operation so aussehen zu lassen, als sei sie sofort eingetreten, wenn sie wirklich nicht abgeschlossen ist.
Hier sind Beispiele für nicht blockierende AJAX-Anforderungen.
- Benutzer klickt auf eine Sammlung von E-Mails löschen. Die Elemente verschwinden sofort aus ihrem Posteingang und können mit anderen Vorgängen fortfahren. Währenddessen verarbeitet eine AJAX-Anforderung das Löschen der Elemente im Hintergrund.
- Der Benutzer füllt ein Formular für neue Datensätze aus. Klicken Sie auf Speichern. Das neue Element wird sofort in der Liste angezeigt. Der Benutzer kann weiterhin neue Datensätze hinzufügen.
Zur Verdeutlichung sind hier Beispiele für das Blockieren von AJAX-Anforderungen aufgeführt.
- Der Benutzer klickt auf eine Sammlung von E-Mails, um sie zu löschen. Ein Sanduhr-Cursor erscheint. Die AJAX-Anfrage wird gestellt und wenn sie antwortet, wird der Sanduhr-Cursor ausgeschaltet. Der Benutzer muss eine Sekunde warten, bis der Vorgang abgeschlossen ist.
- Der Benutzer füllt ein Formular für neue Datensätze aus. Klicken Sie auf Speichern. Das Formular wird grau, und ein AJAX-Loader wird animiert. Es wird die Meldung "Ihre Daten wurden gespeichert" angezeigt, und der neue Datensatz wird in der Liste angezeigt.
Der Unterschied zwischen den beiden obigen Szenarien besteht darin, dass ein nicht blockierendes AJAX-Setup keine Rückmeldung über eine Betriebsleistung liefert, und ein blockierendes AJAX-Setup dies tut.
Das Risiko versteckter AJAX-Anfragen
Das größte Risiko dieses AJAX-Anforderungsstils besteht darin, dass sich die Webanwendung in einem völlig anderen Zustand befindet, wenn die AJAX-Anforderung fehlschlägt.
Zum Beispiel ein nicht blockierendes Beispiel;
- Der Benutzer wählt eine Reihe von E-Mails aus. Klicken Sie auf die Schaltfläche Löschen. Der Vorgang scheint sofort zu erfolgen (die Elemente verschwinden einfach aus der Liste). Der Benutzer klickt dann auf die Schaltfläche "Verfassen" und beginnt mit der Eingabe einer neuen E-Mail. Zu diesem Zeitpunkt entdeckt der JavaScript-Code, dass die AJAX-Anforderung fehlgeschlagen ist. Das Skript könnte eine Fehlermeldung anzeigen, aber es ist zu diesem Zeitpunkt wirklich sinnlos.
Alternativ ein Sperrbeispiel;
- Der Benutzer wählt eine Reihe von E-Mails aus. Klicken Sie auf die Schaltfläche Löschen. Es wird eine Sanduhr angezeigt, aber der Vorgang schlägt fehl. Sie erhalten eine Fehlermeldung mit der Aufschrift "error. Blah blah blah". Sie kehren zur Liste der E-Mails zurück und haben immer noch die E-Mails ausgewählt, die sie löschen möchten. Sie könnten versuchen, sie erneut zu löschen.
Es gibt auch andere technische Risiken für die Ausführung von nicht blockierenden AJAX-Anforderungen. Der Benutzer könnte den Browser schließen, zu einer anderen Website navigieren und zu einem anderen Ort im aktuellen Web navigieren, wodurch der Kontext einer Fehlerreaktion bedeutungslos wird.
Warum wird es so beliebt?
Facebook, Google, Microsoft usw. usw. In all diesen großen Domänen werden zunehmend nicht blockierende AJAX-Anforderungen verwendet, damit Vorgänge so aussehen , als würden sie sofort ausgeführt. Ich habe auch eine Zunahme von Formular-Editoren festgestellt, die keine Schaltfläche zum Speichern oder Senden haben . Sobald Sie ein Feld verlassen oder die Eingabetaste drücken. Der Wert wird gespeichert. Es wurde keine Nachricht oder kein Speicherschritt für Ihr Profil aktualisiert .
AJAX-Anforderungen sind keine Gewissheit und sollten erst nach Abschluss als erfolgreich behandelt werden, aber so viele wichtige Webanwendungen funktionieren genauso.
Sind diese Websites, die nicht blockierende AJAX-Aufrufe verwenden, um reaktionsfähige Anwendungen zu simulieren, die ein unnötiges Risiko eingehen, auf Kosten des schnellen Erscheinens?
Ist dies ein Entwurfsmuster, dem wir alle folgen sollten, um wettbewerbsfähig zu bleiben?