9
votes

"NE OUVERTER LA DERNIÈRE FERMÉE FERMÉ" Causant de montrer le dernier contenu de la demande AJAX

J'utilise l'API HTML 5 Historique pour enregistrer l'état lorsque Ajax Demandes se produisent et que je fournis un contenu HTML complet si l'utilisateur demande à la même page de la demande Ajax.

"Ré-Ouvrir la dernière onglet Fermé" du navigateur apporte le dernier contenu de la demande AJAX sans frapper au serveur. Si le navigateur demanderait sans apporter le contenu de la dernière demande, tout fonctionnerait sans problème. Mais le navigateur montre simplement le dernier contenu de la demande Ajax. P>

J'ai été expérimenté ceci sur chrome 17, Firefox 10. (Je n'ai pas essayé sur IE9, car il n'a pas d'antécédents d'assistance API) P> Quelle est la solution bien connue pour ce problème? P>

EDIT: Ces demandes AJAX ne sont que "Obtenir" la demande de serveur. P>

Il n'est vraiment pas possible de le démontrer dans jsfiddle.net parce que peu de raisons. Vous pouvez le démontrer dans votre localhost comme ci-dessous. P>

FAIRE DEMANDE "GET" DEMANDE AU SERVER et tirez des objets JSON, puis appuyez sur cette URL dans l'API d'historique comme ci-dessous. P>

history.pushState(null,null,url);


5 commentaires

Pouvez-vous publier un code ou un lien vers une page qui démontre le problème?


@robertc i Mise à jour de la question et a fourni des informations de démonstration.


Est la question vraiment les navigateurs qui permettent de réouvrir une onglet, de réouvrir une page mise en cache ou de réouvert-ils la demande de page, y compris JavaScript? Je pense que la réponse à cela est, dans mon expérience, vous êtes Obtenir le dernier état de la page avant qu'il a été fermé; pas de rechargement". Au moins dans Firefox 10 à l'aide de Tabmix Plus.


Bien qu'il ne semble pas arriver avec ce code , alors peut-être que cela dépend. Hmm.


@Jaredfarrish Je n'ai pas pu comprendre votre test sur jsfiddle.net parce que votre demande AJAX n'a ​​rien poussé à l'antécédente et non possible de fermer l'onglet dans l'iframe. Le navigateur n'apporte pas le dernier état de la malheur de la malheur :(. Si le navigateur frapperait au serveur, tout fonctionnerait sans problème. Mais il affiche directement le contenu de la demande Ajax en cache


3 Réponses :


0
votes

Tout dépend du navigateur que vous utilisez et quelles optimisations sont activées.

Google Chrome, par exemple, conservera la page en mémoire. Ainsi, lorsque vous touchez le retour et que vous allez sur un nouveau site, ou lorsque vous réintégez l'onglet fermé - il restaurera la page à partir de la mémoire.

Les navigateurs plus anciens / plus lents vont simplement rafraîchir quoi que ce soit.

Bien que cela ne soit pas vraiment un problème, car votre État JavaScript devrait également être restauré - il devrait être exactement le même à tous les égards lorsqu'ils réouvrent cette page.


1 commentaires

J'utilise la dernière version Chrome et Firefox sans modifier aucun paramètre. Comment ça ne devrait pas un problème? Utilisateur totaly Voir le dernier contenu de la demande Ajax qui est JSON. Je ne suis pas capable de lui montrer le dernier état de page. J'utilise Sammy JS les réalise.



6
votes

Le problème était causé par les en-têtes de réponse HTTP. Les en-têtes contiennent des informations machables pour les demandes AJAX afin que le navigateur montre que le contenu de l'URL du cache sans heurt à la base de données.

Après avoir supprimé les paramètres de cache des en-têtes de réponse, le navigateur a pu atteindre le serveur sans apporter du contenu du cache.


0 commentaires

2
votes

Lorsque vous rouvrez un onglet fermé, le navigateur est autorisé à réutiliser les données du cache de l'URL donnée pour remplir la fenêtre. Étant donné que les données du cache proviennent de la réponse de la demande Ajax, c'est ce qu'il utilise et que vous voyez le JSON.

Cela conduit à la question: Pourquoi le navigateur n'a-t-il pas utilisé le HTML du cache lors de la satisfaction de la demande Ajax? Les navigateurs utilisent des règles différentes pour déterminer s'il faut utiliser du contenu mis en cache en fonction de ce qu'ils font. Dans ce cas, il apparaît que Chrome est heureux de la réutiliser lors de la restauration de l'onglet récemment fermé, et non lors de la demande Ajax.

Vous pouvez le corriger en disant le navigateur de jamais cache la réponse. Si cela est souhaitable dépend de votre cas d'utilisation.

Par exemple, insérez-les en haut de votre fichier (après l'ouverture étiquette, bien sûr) Pour moi: xxx


0 commentaires