2014-01-07 2 views
1

У меня проблема с кодом jQuery, который должен обнаруживать подключение к Интернету.Нет обнаружения в Интернете jQuery не работает

function checkConnection() { 
var connected = true; 
var img = document.createElement('img'); 
img.src = "https://p5-zbjpil5uzqzqg-b5icu4xm7kglqch5-458861-i2-v6exp3-ds.metric.gstatic.com/v6exp3/6.gif"; 
img.onerror = function() { 
    connected = false; 
}; 
return connected; 
} 
setInterval(function() { 
var isConnected = checkConnection(); // checkConnection() comes from above code 
if (isConnected) { 
    alert('internet'); 
} else { 
    alert('no internet'); 
} 
}, 3000); 

Не имеет значения wheater Я в сети или в автономном режиме, появляется одно и то же окно предупреждения. Не могли бы вы помочь исправить код? Скрипка доступна ниже, не стесняйтесь ее исправлять.

http://jsfiddle.net/yV28D/2/

Большое спасибо.

+8

Ваше возвращение происходит до того, как произойдет террор, в результате чего он всегда возвращается к истине. Добро пожаловать в асинхронное программирование! –

+0

Привет, Кевин. Спасибо за ваш совет. Не могли бы вы помочь мне исправить это? – qqruza

+0

Предупреждение в обработчиках onError/onSuccess? И это javaSCRIPT, а не Java. Различные языки и платформа полностью. – Gimby

ответ

6

При работе с событиями вы обычно хотите использовать обратные вызовы.

http://jsfiddle.net/yV28D/3/

function checkConnection(callback) { 
    var img = document.createElement('img');  
    img.onerror = function() { 
     callback(false); 
    }; 
    img.onload = function() { 
     callback(true); 
    }; 
    img.src = "https://p5-zbjpil5uzqzqg-b5icu4xm7kglqch5-458861-i2-v6exp3-ds.metric.gstatic.com/v6exp3/6.gif"; 
} 
setInterval(function() { 
    checkConnection(function(isConnected){ 
     if (isConnected) { 
      console.log('internet'); 
     } else { 
      console.log('no internet'); 
     } 
    }); // checkConnection() comes from above code 
}, 3000); 

В противном случае, вы всегда получите true, потому что возвращение происходит до обратного вызова ошибки имеет шанс быть выполнена.

Кроме того, при работе с событиями onload и onerror вы всегда хотите связать события перед установкой src, иначе это возможно, если событие произойдет до того, как вы привяжетесь к нему.

+0

Это то, что я называю профессионализмом! Спасибо Kevin – qqruza

+0

Привет, Кевин, есть ли способ предотвратить кеширование изображения? – qqruza

+1

Да, добавьте '$ .now()' к нему. 'img.src = theurl +"? _ = "+ $ .now()' –

Смежные вопросы