IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Gestion des retours avant / arrière via le navigateur avec AJAX


Sujet :

AJAX

  1. #1
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut Gestion des retours avant / arrière via le navigateur avec AJAX
    Bonjour,

    Je dispose d'une application Web composée de deux pages.
    • La première sert à se connecter
    • la seconde permet l'affichage des données AJAX


    Le problème est que l'utilisateur est souvent tenté d'utiliser le bouton retour arrière de son navigateur pour recharger les données AJAX. Par exemple lorsqu'il navigue dans une sous catégorie, il clique sur retour arrière pour retrouver l'ensemble des catégories. Le problème vient alors du fait qu'en procédant ainsi il se retrouve sur la page de connexion.
    Existe-t-il un moyen d'éviter ce comportement, essentiellement dû au navigateur ?

    Merci

    Le blog.clever-age.com donne quelques conseils pratiques
    De même qu'ici : une clarification sur l'ergonomie d'un site reposant pour partie sur AJAX

    Sauf que parfois les clients sont têtus :/ Je continue donc à chercher une solution.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par Orang- Voir le message
    Le blog.clever-age.com donne quelques conseils pratiques
    cela permet d'éviter ton problème, est ce que tu as essayé ?

  3. #3
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut
    Pour être franc je me suis un peu perdu dans les explications et la lisibilité du code proposé. Mais ok je vais voir ça plus attentivement.
    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    en réalité, tu n'as besoin que d'UNE SEULE page :
    Dans cette unique page :
    • Si pas connecté : afficher le formulaire de connexion
    • Si connecté : afficher le site

    Une variable de SESSION peut suffire.

  5. #5
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut
    Merci Effectivement c'est sans doute le plus simple.
    Edit : 05/10/15 Malgré cela je préfère conserver une page d'accueil distincte de la seconde permettant l'affichage des données AJAX.
    @mathieu la page fait référence au plugin history. Celui-ci n'est plus maintenu depuis le 25 février 2012 !
    Je continue à chercher. Si je trouve une solution simple et fonctionnelle, je viendrai l'ajouter ici.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Alors t'as avancé ?

    Il y a plusieurs cas de figure.

    1/ Si tu veux utiliser la navigation avant/arrière du navigateur avec ajax

    a/ créer ou modifier le hash de l'url en javascript avec document.location.hash à chaque retour de requête ajax
    Cela permet de créer des entrées dans l'historique du navigateur.
    b/ créer une écoute pour observer un changement d'url du navigateur (tu peux utiliser "hashchange" ou "popstate") et, en différenciant que ce changement ne provient pas d'un click sur la navigation spécifique ajax, recharger en ajax la vue correspondante au hash.
    Là on a rendu les boutons du navigateur plus conviviaux puisqu'ils suivent la navigation ajax.

    2/ Si tu souhaites simplement faire en sorte que le bouton retour arrière du navigateur ne revienne pas à la page précédente mais reste sur la même page en faisant une action quelconque tu peux ajouter une entrée nommée dans l'historique avec "history.pushState" quand tu déclenche la navigation ajax. Ensuite avec "popstate" ou ""hashchange"" tu contrôle le changement d'historique et agit en conséquence.

    La doc est ici sans oublier les liens bas de page.

    J'ai utilisé ces deux procédés sur ce petit site pour les diaporamas de présentation.

    1/ Si tu utilises les boutons de navigation en bas des blocs d'images, cela affiche les pages suivantes du diaporama en ajax. Mais tu pourras utiliser les boutons du navigateur pour revenir en arrière et voir les blocs précédemment affichés.

    2/ Si ensuite tu clique sur une image, la diapo-box s'affiche pour afficher les images en grand. Cette fois-ci j'ai gardé une url fixe et l'on navigue comme convenu avec les boutons ajax du bas de page mais si l'on clique sur le bouton arrière du navigateur, cela ferme simplement la diapo-box et on se retrouve sur la même page (celle depuis laquelle on vient d'obtenir la box). J'ai simplement ajouté une entrée mémoire dans l'historique du navigateur, de sorte quand je fais history.back() je reste sur la même page

  7. #7
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut
    @ABCIWEB : J'avais un peu avancé, mais en bricolant des liens pas terribles et en mélangeant du code PHP et JS. Du coup, je me suis inspiré de l'outil que tu as développé. Je le trouve très fluide et agréable à utiliser (je remarque juste peut être de l'absence d'une croix de fermeture lorsque l'image s'affiche en grand). D'autant que Je ne connaissais pas du tout les éléments que tu évoques.

    Merci !

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par Orang- Voir le message
    Je le trouve très fluide et agréable à utiliser (je remarque juste peut être de l'absence d'une croix de fermeture lorsque l'image s'affiche en grand)
    Merci !
    Oui j'ai pas voulu implémenter un bouton inutile.

    On peut fermer la box d'agrandissement en cliquant sur l'image, c'est un comportement très courant.

    Et c'est justement pour les nouveaux utilisateurs qui n'auraient pas ce réflexe que j'ai modifié le comportement du bouton du navigateur, cf point numéro /2 évoqué dans mon précédent message :

    - Si on ne sait pas quoi faire pour fermer la box et qu'on a pas le réflexe de cliquer sur l'image, on a tendance à essayer le bouton retour arrière du navigateur, ce qui fonctionne comme prévu et nous ramène sur la page du diaporama d'où provient le click qui a déclenché l'agrandissement.

    Si je n'avais pas ajouté une entrée dans l'historique du navigateur quand on déclenche la box d'agrandissement, le bouton retour arrière du navigateur aurait affiché la page précédente de son historique. Alors qu'au final on reste sur la même page et je m'en sert juste pour fermer la box d'agrandissement

  9. #9
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut
    Justement c'est en ce sens que je trouve l'application très fluide. Cette possibilité de gérer finement l'historique est bien pratique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des objets SQL Server via Visual source Safe
    Par battl14 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 18/03/2009, 16h27
  2. Réponses: 3
    Dernier message: 29/12/2008, 16h31
  3. [DOM] Gestion des événements avant l'existence d'un élément
    Par Cladjidane dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 04/11/2008, 14h24
  4. [Dates] Gestion des dates avant 1970
    Par viny dans le forum Langage
    Réponses: 4
    Dernier message: 30/08/2006, 17h01
  5. [MySQL] Gestion des retour à la ligne
    Par Husqvarna dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/10/2005, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo