2010-07-13 4 views
2

J'ai une application Ajax à laquelle je voudrais ajouter des sessions et des connexions.Simple moyen de surveiller le résultat de la demande pour détecter le délai d'attente de session?

Actuellement, l'application utilise jQuery obtenir un raccourci pour envoyer une demande

that.ajaxRequest = $.get(query_string, function(data, textStatus, xhr) { 

    // do somthing with data 

}); 

J'ai un système sur le serveur qui lance un message d'erreur si la session a expiré.

Sur le client, je sais que je peux faire face à cela en utilisant les éléments suivants:

that.ajaxRequest = $.get(query_string, function(data, textStatus, xhr) { 

    if (data == "E_TIMEOUT") { 

     // redirect to login 

    } else { 

     // do something 

    } 

}); 

Cependant, je préférerais ne pas avoir à écrire le même code de délai d'attente pour chaque .get $ - il y a un tas d'entre eux tout au long de l'application.

Existe-t-il un moyen de surveiller le résultat d'une requête et de prendre des mesures si nécessaire, sans réécrire toutes mes instructions $ .get?

Merci,

+0

Vous devriez vraiment vérifier/valider la réponse qui revient. Vous pouvez créer une fonction spécifique pour cela, afin de minimiser le code que vous ajoutez à chaque rappel. if (dataChecker (data)) {} et dataChecker peuvent être responsables de la redirection ou d'autres fonctions en fonction du message d'erreur le cas échéant. – Fosco

Répondre

3

Vous pouvez utiliser $.ajaxSetup() pour cela:

$.ajaxSetup({ 
    complete: function (xhr) { 
    if (xhr.getResponseHeader('E_TIMEOUT') == "1") { 
     //redirect to login 
    } 
    } 
}); 

Cette approche est légèrement différente, il utilise des en-têtes de réponse que vous pouvez obtenir sans analyse des données un temps supplémentaire chaque demande (qui est possible, mais pas documenté et sujet à rupture), ce que vous auriez à faire autrement, dans une situation globale.

Sur le côté serveur où vous envoyez E_TIMEOUT pour la réponse, il suffit de le modifier pour ajouter un en-tête, E_TIMEOUT=1 (ou tout en-tête que vous voulez). En fait, je place cet en-tête sur ma page de connexion, la redirection des délais via un 302 (que XmlHttpRequest suit de manière transparente), donc si les délais d'attente utilisateur et la requête AJAX finissaient sur la page de connexion, je fais un location.reload() page. C'est juste une autre option si vous choisissez cette voie, il ressemble à ceci:

$.ajaxSetup({ 
    complete: function (xhr) { 
    if (xhr.getResponseHeader('LoginPage') == "1") { 
     location.reload(); 
    } 
    } 
}); 

Sans savoir ce que la plate-forme de serveur que vous utilisez, je ne peux pas dire comment définir les en-têtes, mais il est assez facile sur chaque plate-forme commune.

+0

Très bien. Je vous remercie! – Travis

0

Vous devriez utiliser firefox et télécharger un programme appelé 'FireBug'. Cela vous montrera toutes les demandes envoyées et la réponse qui revient de l'appel AJAX. C'est une action bourrée de bonté & outils de développement web.

Questions connexes