2009-08-22 7 views
1

J'ai une liste des "utilisateurs en ligne", que je rafraîchis toutes les 30 secondes avec Ajax.PeriodicalUpdater de prototype.js.Arrêter Prototype.js Ajax.PeriodicalUpdater lors de la déconnexion de l'utilisateur

Il y a un problème: si un utilisateur a deux onglets/fenêtres ouverts avec le site, se déconnecte dans l'un d'entre eux, PeriodicalUpdater n'est pas annulé. Cela signifie que PeriodicalUpdater met à jour mon élément de bloc avec la page de connexion entière, car j'ai une authentification reposante, qui redirige vers cela. J'utilise des sessions PHP, et je ne peux vraiment pas me concentrer directement sur celui-ci.

Est-ce que l'un de vous deux peut me pointer dans la bonne direction?

Répondre

0

Je considérerais de changer la méthode qui renvoie les résultats de sorte qu'il ne nécessite pas une session authentifiée pour y accéder, mais il retourne s informations valides uniquement lorsqu'il y a une session authentifiée. Sinon, il renvoie une valeur indiquant que les mises à jour doivent cesser et un message approprié à afficher dans le bloc de votre utilisateur en ligne. Cela signifierait que vous devrez probablement renvoyer JSON à la place - pas une mauvaise chose - et soit le combiner avec un extrait HTML dans le cadre du JSON ou simplement construire le code HTML sur le client à partir des données JSON (mieux IMO depuis la vue est le bon endroit pour faire un balisage).

+0

Bien sûr! Mec, tu es une star. J'ai déjà une liste de fichiers exclus dans ma classe de contrôle d'accès. J'ai ajouté onlineList.php à mon tableau $ exclusPages, enveloppé la page entière dans if (isset ($ _ SESSION ['user_id'])) - tout est bon. Merci beaucoup! – Preben

0

Lors de la création du PE, garder une référence à elle:

// At global scope, or ideally if you have a namespaced object, use that 
var thePE; 

// Where you create the PE 
thePE = new PeriodicalExecuter(yourFunction, 3); 

Et quand vous le voulez arrêter, lui dire d'arrêter (en supposant qu'il a été lancé):

if (thePE) { 
    thePE.stop(); 
    thePE = undefined; 
} 

(PeriodicalExecuter # stop docs here.)

+0

Merci pour le pourboire! J'essaie de comprendre où et quand je veux vraiment que ça s'arrête. Est-il possible de vérifier si ma session PHP est toujours active dans le JavaScript? – Preben

Questions connexes