Question

Sur ma page d'accueil, j'ai indiqué:

<ul id="login">
  <li> <a id="loginswitch" href="./login-page">log-in</a> | </li>
  <li> <a id="signupswitch" href="./signup-page">sign-up</a> </li>
</ul>

Via MooTools, je récupère ces éléments d'ancrage par identifiant. Une fois cliqué dessus, un div flashy apparaîtra en dessous d'eux, contenant le formulaire de connexion ou le formulaire d'inscription (avec des méthodes pour arrêter la propagation des événements bien sûr). et lorsque les champs sont remplis, l'appel AJAX est lancé - il est censé créer une session et recharger la page afin que l'utilisateur ait un visuel auquel il est maintenant connecté et que des contrôles au niveau de l'utilisateur apparaissent, etc.

L'appel ajax est lancé par la classe MooTools AJAX et l'option evalScripts est définie sur true. La page AJAX renvoie le code de script:

<script type="text/javascript">window.location = self.location;</script>

Ce système fonctionne parfaitement - je me demande maintenant pourquoi, si je modifie les valeurs href des ancres en href = "# & <; code", mes scripts ne fonctionneront pas plus?

Cela a-t-il quelque chose à voir avec la fenêtre?

At-il changé sa propriété lorsque j'ai cliqué sur un lien ou alors même lorsque la propagation de l'événement a été arrêtée ??

Était-ce utile?

La solution

window.location = self.location;

Ce javascript est en cours d'exécution .

Lors de son exécution, il est demandé au navigateur de remplacer la valeur de window.location par une nouvelle valeur. Tous les navigateurs ne réagiront pas de la même manière ici. Certains fonctionneront probablement comme vous le souhaitez, mais d'autres se montreront intelligents et compareront les deux valeurs. Le navigateur sait sur quelle page il se trouve et il sait que vous lui demandez simplement de passer à la même page.

Cache du navigateur

Le navigateur dispose même d'une copie de votre page actuelle dans le cache . Il peut parler au serveur et demander si la page qu'il a en cache est toujours valide. Si le cache est valide, il peut décider de ne pas forcer le rechargement de la page. En coulisse, cela se produit avec les en-têtes HTTP. Les navigateurs et les serveurs peuvent communiquer via HTTP de plusieurs manières. Dans ce cas, votre navigateur envoie une demande rapide au serveur en disant quelque chose comme ceci:

GET /stackoverflow.com/posts/196643/index.html
HTTP/1.1
Host: www.stackoverflow.com
User-Agent: Mozilla/5.0
If-Modified-Since: Sun, 12 Oct 2008 20:41:31 GMT

Cette opération s'appelle une demande GET conditionnelle . En indiquant If-Modified-Since , votre navigateur dit: "Donnez-moi ce fichier, mais uniquement s'il a été modifié depuis la dernière fois que je l'ai vu."

En résumé, vous n'avez pas explicitement demandé au navigateur de recharger la page.

Voici comment vous pouvez:

location.reload( true );

Le " vrai " est un paramètre facultatif , pour forcer un rechargement . Le navigateur ne regardera même pas la mémoire cache. Il fera juste ce que vous dites.

Autres conseils

Aller à une ancre sur une page - ce qui est ce que # signifie - ne nécessite pas de rechargement.

S'ils me confiaient cette tâche particulière au travail, je la renvoyerais à la conception. Sauf s'il s'agit d'une page sécurisée ou d'une connexion OpenID, vous ne devriez pas afficher de formulaire de connexion ou de connexion. Les utilisateurs doivent apprendre à rechercher ce https: en haut de leur page et ne jamais se connecter s'ils ne le voient pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top