2010-08-14 3 views
0

Est-il possible de notifier un serveur (faire une seule requête HTTP avec un peu de données, la réponse est sans importance) lorsque le client quitte la page?notifiant le serveur (XMLHttpRequest?) Sur l'événement onunload?

Je suis en train d'utiliser une application de comète python-tornado avec javascript gardant en permanence une demande de connexion au serveur (qui se ferme et rouvre sur l'événement.): https://launchpad.net/eftw).

Je n'ai pas trouvé un moyen facile de déboguer ceci (avec FireBug, en particulier). Cela le rend très problématique.

Oh, et le code réel (car il peu utilisable déjà de toute façon): http://bazaar.launchpad.net/~hoverhell/xftw/trunk/files

+0

Oh. En fait, je ne l'ai pas fait dans la plupart des cas parce que je n'ai trouvé aucune réponse vraiment acceptable (ou, pour quelques-uns, j'ai raté la réponse). J'imagine que je devrais abaisser ma préférence de perfection en ce qui concerne les réponses :) – HoverHell

+0

@ hell.orts.ru - C'est valable, c'est plus pour le gars * suivant * de trouver une solution de travail (ou au moins une explication sur pourquoi) quand ils arrivent via google: –

Répondre

4

Vous ne pouvez pas faire cela d'une manière fiable , selon le navigateur et la latence, votre XmlHttpRequest est susceptible d'être tué avant qu'il ne finisse réellement.

Les fabricants de navigateurs veulent (correctement, imo) rendre la page suivante aussi rapidement que possible. Les onbeforeunload et onunload sont des événements de nettoyage destinés à éliminer rapidement toutes les variables laissées, elles ne sont pas destinées à être utilisées ... donc pas le navigateur. Comme la récupération de place dans les nouveaux navigateurs a également été considérablement améliorée, le navigateur a encore moins de raisons d'attendre sur ces événements.

Vous pouvez envoyer une demande dans l'événement window.onbeforeunload ... mais l'obtiendrai au serveur? Peut être.

+0

Malheureusement, il ne semble pas traiter XHR en mode onbeforeunload/state. Ou, au moins, ce n'était pas dans mon cas. – HoverHell

+0

Oh, en fait, ça marche. Avec XHR non asynchrone. – HoverHell

+0

En plus: existe-t-il un moyen de déboguer des choses qui arrivent à la fermeture de la page? – HoverHell

Questions connexes