2010-04-12 4 views
5

J'ai essayé pour « décharger » et « beforeunload » obligatoire dans le code suivant, mais aucun du navigateur envoie une requête:Ondemand javascript sur appel unload fenêtre à l'aide jquery

$(window).bind('unload', function(){ 
     $.ajax({cache: false, 
     dataType: "script", 
      url: "test.php" 
     }); 
    }); 

Toute suggestion?

+0

Dans quel navigateur utilisez-vous ceci? Pendant longtemps, Safari a eu des problèmes avec l'implémentation correcte des gestionnaires 'unload'. Je ne sais pas si c'est toujours vrai. – Syntactic

Répondre

6

Le navigateur n'attend pas que ce code se termine ... il fonctionne très bien :) Ajoutez un alert('hi') pour le voir fonctionner. Le problème que vous voyez est typique des problèmes unload, le navigateur navigue bien avant qu'une demande ne soit renvoyée dans votre cas ... et il devrait vraiment, aucun code que vous exécutez devrait avoir à remplir avant que je Je suis autorisé à passer à la page suivante. C'est ainsi que se comporte unload. Vous pouvez rendre l'appel synchrone pour y maintenir l'utilisateur, mais veuillez ne le faites pas. L'événement unload a été créé sur la fenêtre principalement pour nettoyer tout ce qui reste dans le DOM dont vous aviez besoin, plus encore lorsque la récupération de place n'était pas aussi bonne qu'elle l'est maintenant (et n'est toujours pas dans IE). ..il n'était pas vraiment conçu avec AJAX ou le suivi métrique à l'esprit.

1

Il suffit de définir l'option async sur false.

$(window).bind('unload', function(){ 
    $.ajax({ 
    cache: false, 
    async: false, 
    dataType: "script", 
     url: "test.php" 
    }); 
}); 
Questions connexes