2011-04-14 3 views
0

J'utilise ajax et jquery pour envoyer un * synchonou * s requête HTTP à un script php dans une application web pour se déconnecter de l'utilisateur si l'utilisateur décide de quitter la page plutôt que de se déconnecter .jquery ajax requête http synchrone

je suis en utilisant hte code suivant:

function close() 
{ 
    return "If you exit you will be logged out ...!"; 
} 
window.onbeforeunload = close; 

$(window).unload(function() { 

$.ajax({ 
     url: "logout.php", 
     async:false, 
     success: function(msg){ 
     alert("You have been logged out ...!");} 
});  
}); 

le ajax travaille dans tous les cas à part quand je presse le bouton de retour. Quand j'appuie sur le bouton de retour, j'obtiens même la fonction de succès en cours d'exécution, mais quand je vérifie le script php n'a pas fonctionné car j'ai une fonction fwrite dedans pour me dire que cela a fonctionné. il fonctionne dans d'autres cas en dehors du bouton de retour.

Répondre

2

J'utilise ajax et jquery pour envoyer une demande http asynchonous

La demande dans le code que vous avez cité est synchrone, asynchrone non. Si la fonction success est appelée lorsque vous ne voyez pas le code PHP en cours d'exécution, cela signifie que votre navigateur a mis en cache le résultat précédent et l'a réutilisé. Vous pouvez être en mesure de contourner cela en ajoutant cache: false à vos options de demande.

+0

J'ai juste essayé d'ajouter le cache: faux, cela n'a pas fonctionné. cela peut-il avoir quelque chose à voir avec le fait que lorsque je presse, il retourne à un autre script php? – user434885

+0

@user: Si vous voyez vraiment la fonction 'success' appelée, mais que vous ne voyez vraiment pas la ligne connectée depuis votre PHP, je ne vois pas d'autre option que le navigateur qui utilise une réponse en cache ou (excuses) que vous êtes en train de mal observer. Quoi qu'il en soit, faire quoi que ce soit sur la page de déchargement est * extrêmement * peu fiable (ce code ne fera pas ce que vous voulez sur Safari, Opera, IE9, autres), donc je suppose que vous devez avoir un repli (time-out, etc .). Je recommanderais de ne pas avoir le 'alert' et de simplement prendre toute déconnexion proactive que vous obtenez du déchargement en tant que * bonus *, pas quelque chose que vous comptez réellement. –

0

Cela peut avoir un rapport avec le cache arrière/avant du navigateur. Vérifiez this answer pour les détails, également la réponse acceptée sur cette page qui fait un tour avec l'attribut onunload de l'élément <body>. Votre cas est le contraire de celui de la question liée, mais cela pourrait aider.