J'ai du code Javascript JQuery qui fait un appel Ajax au serveur toutes les 5 minutes, c'est pour garder la session serveur en vie et garder l'utilisateur connecté. J'utilise la $.ajax()
méthode dans JQuery. Cette fonction semble avoir une propriété «erreur» que j'essaie d'utiliser dans le cas où la connexion Internet de l'utilisateur tombe en panne afin que le script KeepAlive continue de fonctionner. J'utilise le code suivant:
var keepAliveTimeout = 1000 * 10;
function keepSessionAlive()
{
$.ajax(
{
type: 'GET',
url: 'http://www.mywebapp.com/keepAlive',
success: function(data)
{
alert('Success');
setTimeout(function()
{
keepSessionAlive();
}, keepAliveTimeout);
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert('Failure');
setTimeout(function()
{
keepSessionAlive();
}, keepAliveTimeout);
}
});
}
Lorsque je l'exécute, j'obtiens une fenêtre contextuelle `` Succès '' à l'écran dans une boîte d'alerte toutes les 10 secondes, ce qui est bien. Cependant, dès que je débranche le câble réseau, je n'obtiens rien, je m'attendais à ce que la fonction d'erreur soit appelée et voit une boîte d'alerte «Échec», mais rien ne se passe.
Ai-je raison de supposer que la fonction «erreur» concerne uniquement les codes d'état non «200» renvoyés par le serveur? Existe-t-il un moyen de détecter les problèmes de connexion réseau lors d'un appel Ajax?
la source
Réponses:
la source
<form ... data-ajax-failure="YourMethod" ...></form>
et sur votre méthodefunction YourMethod(XMLHttpRequest) { ..same code... }
XMLHttpRequest.readyState
voir ajax_xmlhttprequest_response.aspVous devez simplement ajouter:
timeout: <number of miliseconds>,
quelque part à l'intérieur$.ajax({})
. Peut égalementcache: false,
aider dans quelques scénarios.$ .ajax est bien documenté , vous devriez y vérifier les options, vous pourriez trouver quelque chose d'utile.
Bonne chance!
la source
Comme je ne peux pas dupliquer le problème, je ne peux que suggérer d'essayer avec un délai d'expiration sur l'appel ajax. Dans jQuery, vous pouvez le définir avec $ .ajaxSetup (et il sera global pour tous vos appels $ .ajax) ou vous pouvez le définir spécifiquement pour votre appel comme ceci:
JQuery enregistrera un délai de 15 secondes pour votre appel; après cela, sans code de réponse http du serveur, jQuery exécutera le rappel d'erreur avec la valeur textStatus définie sur "timeout". Avec cela, vous pouvez au moins arrêter l'appel ajax, mais vous ne pourrez pas différencier les vrais problèmes de réseau de la perte de connexions.
la source
Ce que je vois dans ce cas, c'est que si je tire le câble réseau de la machine cliente et que j'effectue l'appel, le gestionnaire de succès ajax est appelé (pourquoi, je ne sais pas) et le paramètre de données est une chaîne vide. Donc, si vous prenez en compte la vraie gestion des erreurs, vous pouvez faire quelque chose comme ceci:
la source
Si vous effectuez un appel interdomaine, utilisez Jsonp. sinon l'erreur n'est pas renvoyée.
la source
UTILISATION
(plus de code ci-dessous - UPLOAD IMAGE EXAMPLE)
la source
voici ce que j'ai fait pour alerter l'utilisateur en cas de panne de son réseau ou d'échec de la mise à jour de la page:
J'ai une balise div sur la page où je mets l'heure actuelle et je mets à jour cette balise toutes les 10 secondes. Cela ressemble à quelque chose comme ceci:
<div id="reloadthis">22:09:10</div>
À la fin de la fonction javascript qui met à jour l'heure dans la balise div, je mets ceci (après la mise à jour du temps avec AJAX):
C'est tout! Vous pouvez bien sûr remplacer la partie d'alerte par tout ce que vous voulez. J'espère que cela t'aides.
la source
Avez-vous essayé cela?
Cela devrait gérer tous les AjaxErrors. Je l'ai trouvé ici . Vous y trouverez également une possibilité d'écrire ces erreurs sur votre console Firebug.
la source