Est-il possible de persister (sans rechargement) page AJAX état au DOS de clics sur le bouton?

StackOverflow https://stackoverflow.com/questions/34227

  •  09-06-2019
  •  | 
  •  

Question

Je suis familier avec plusieurs approches pour rendre le bouton de retour du travail dans les applications AJAX dans diverses situations, mais je n'ai pas trouvé une solution qui fonctionne normalement dans mon scénario spécifique.

Les pages que je suis en train de travailler avec l'interface de recherche pour un site.Vous entrez dans des conditions normales dans un zone de recherche, cliquez sur "aller et le vent jusqu'à une page de résultats de recherche.Sur la page de résultats de recherche il y a une tonne de contrôles d'INTERFACE utilisateur pour filtrer/trier les résultats de la recherche pour trouver ce que vous cherchez.Certaines des opérations déclenchées par ces contrôles peuvent prendre une (relativement) longue période de temps (par ex.plusieurs secondes).

Ce temps de latence est très bien dans le cas où l'utilisateur est d'abord de filtre et de tri de leurs résultats...il y a une belle AJAX spinner et ainsi de suite...toutefois, lorsque l'utilisateur clique sur un résultat de recherche et clique sur le bouton de RETOUR, je voudrais que la page instantanément être restauré à l'état où il était quand ils ont cliqué.

Je peux restaurer les états à l'aide IFRAMEs/identificateurs de fragment comme un dictionnaire de l'historique de la page, mais il arrive que lorsque l'utilisateur clique sur le bouton précédent la première page est chargée, puis (re) fait l'AJAX requête pour obtenir l'état d'une page en arrière, ce qui déclenche l'AJAX spinner et un autre d'attente possible plusieurs secondes.

Est-il de toute approche qui ne nécessite pas ce type de deux-étape de chargement de la page lorsque l'utilisateur revient à la page via le bouton de RETOUR?

Edité pour ajouter:Je suis partielle de jquery, mais je serais heureux avec des solutions qui dépendent d'autres bibliothèques/boîtes à outils ou qui sont autonomes/raw javascript.

Edité pour ajouter:Je devrais ai ajouté que j'essaie d'éviter des cookies et des sessions parce que cela empêche les gens d'avoir plusieurs brower fenêtres/onglets ouverts et la manipulation de différents ensembles de résultats de recherche en même temps.

Edit:Matt, pouvez-vous revenir sur votre proposition de solution (déclenchement d'un changement de page de l'événement via le fragment identifiant)?Je vois comment cela pourrait contribuer à l'ARRIÈRE de clics sur le bouton sur la même page, mais pas de REVENIR à la page de résultats de recherche après avoir cliqué sur un résultat spécifique.

Était-ce utile?

La solution

Essayez d'utiliser localStorage objet.Voici crossbrower libs jStorage et WEBSHIMS json-stockage

Autres conseils

Il suffit d'utiliser un cookie.

Avez-vous étudié les YUI Historique du Navigateur Manager?

Serait-il contribuer à déclencher un changement de page de l'événement en cliquant sur "Ajouter un peu d'info pour le # à la fin de l'URL approche".

De cette façon, en cliquant sur le bouton retour ne devrait pas vraiment changer de page, et vous devriez être en mesure de restaurer l'état sans que le premier chargement de la page.

Utiliser quelque chose de persistant, qui est lié au profil de l'utilisateur.

Les Cookies et les sessions sont de bonnes idées, mais vous pouvez aussi garder ces choses dans la base de données.Qui vous donne un avantage supplémentaire d'être en mesure d'économiser de l'utilisateur préférences du filtrage à travers différents session de navigation.(si, pour exampple, il était à la recherche de quelque chose dans le bureau et a alors décidé de poursuivre la recherche quand il est de retour à la maison).

Tout dépend de la complexité des filtres et de la météo ou non c'est quelque chose que vous pensez que l'utilisateur veut utiliser à travers différentes sessions de navigation..

Edité pour ajouter:J'aurais ajouté que J'essaie d'éviter des cookies et des sessions parce que cela empêche les gens d'avoir plusieurs brower fenêtres/onglets ouverts et la manipulation de différents ensembles de recherche les résultats en même temps.

Vous pouvez créer un jeton aléatoire et de l'attribuer à l'identificateur de fragment.

  • sur la première page de la charge de créer un jeton si aucun identificateur de fragment est réglé
  • avant de naviguer, de l'enregistrer tous les temporaires ajax données dans un cookie avec ce jeton comme indice.
  • au moment de frapper en arrière, si vous avez un identificateur de fragment d'ensemble, charger les données à partir de la marque dans le cookie.
  • vous pouvez même ajouter un champ "time" à l'expiration des jetons, etc...

exemple de cookie (JSON):

{"ajaxcache":[{"token":<token>,"time":<time>,"data":<data>}, ... ]}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top