Javascript / dashcode: vérifiez la connexion Internet

Je développe un widget qui récupère des données via Internet via ajax et je souhaite fournir un message d'erreur si le widget ne peut pas se connecter au serveur. Je fais la requête avec l'objet ajax de jquery qui fournit une fonction de rappel d'erreur, mais il n'est pas appelé lorsqu'il n'y a pas de connexion Internet, uniquement si la requête est faite mais échoue pour d'autres raisons.

Maintenant, comment puis-je vérifier si l'ordinateur est connecté à Internet?

MISE À JOUR : Depuis que vous créez un widget Dashboard, j'ai effectué plusieurs tests.

J'ai trouvé que l'appel $.ajax déclenchait une erreur quand il n'y avait pas de connexion Internet. Je suis donc allé créer un objet XMLHTTPRequest manuellement avec beaucoup de succès. Si vous avez besoin de l'analyse JSON, je suggère également d'inclure l'analyseur json2.js .

Ce que j'ai fait pour que cela fonctionne:

  1. Dans les attributs de widget dans Dashcode, j'ai cliqué sur "Autoriser l'accès au réseau" (Si vous n'utilisez pas Dashcode, vérifiez les documents pour le paramètre de plistage approprié pour activer cette option)
  2. J'ai utilisé le code suivant:
 Var xhr = new XMLHttpRequest ();
 Xhr.addEventListener ('readystatechange', state_change, true);
 Xhr.open ("GET", url, true);
 Xhr.send (null);

 Function state_change () {
    If (xhr.readyState == 4) {
         Si (xhr.status == 200) {
           Console.log ('travaillé');  // Fonctionne uniquement si vous exécutez dans Dashcode
           // utilise xhr.responseText ou JSON.parse (xhr.responseText)
         } Sinon si (xhr.status == 0) {
           Console.log ('no internet');  // Fonctionne uniquement si vous exécutez dans Dashcode
         } autre {
           // Une autre erreur
         } 
    }
 }

/ Mise à jour finale

J'ai répondu ceci en modifiant ma réponse à votre question initiale puisque vous l'avez demandé dans les commentaires. Après avoir commenté, je vous ai posté cette question.

Pour résumer, ajoutez le paramètre de timeout à votre appel $.ajax et définissez-le à un nombre faible (comme 5000 millisecondes). Votre fonction d'erreur sera appelée après la fin de la demande.

Dans votre fonction d'erreur, le deuxième argument est l'état, vérifiez si cela == "timeout", sinon vous ne pouvez pas accéder au service Web (ou ce que vous vous connectez), que vous ayez un accès Internet Ou pas, je suppose que c'est ce dont vous vous souciez.

 $.ajax({ /* your other params here*/ error: function (req, status, error) { if(status == "timeout") alert("fail!"); }, timeout: 2000 //2 seconds }); 

Consultez les sections sur timeout et error ici .

Juste une ligne

 if(window.navigator.onLine) { // You are connected to internet } else { // You are not connected to internet } 

window.navigator.onLine renvoie true ou false.

Testé sur IE 8 et Mozilla Firefox 3.5.7. Vérifiez les autres navigateurs plus anciens.

Vous pouvez simplement l'écrire avec un code javascript standard et facile à comprendre. Je n'ai pas développé de «widgets», juste des applications d'iphone sur Internet, mais cela devrait toujours fonctionner. Voici:

 var online = window.navigator.onLine; if (!online){ alert('You are not currently connected to the internet. Please try again later.'); } 

-Connor

Une idée …

Définissez une minuterie javascript. Si l'appel ajax est réussi, effacez la minuterie. Si la minuterie déclenche, cela signifie que la requête a échoué.

Comme une note latérale …

Il est difficile de dire si un ordinateur est sur Internet, car pour la plupart des ordinateurs, l'internet commence au commutateur >> routeur >> modem >> routeur >> etc … Lorsqu'il est «cassé», il y a généralement plusieurs sorts, Et la seule façon (je sais) de savoir si vous êtes en ligne est de "essayer".