没有互联网检测jQuery不起作用

时间:2014-01-07 17:00:27

标签: javascript 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);

无论我在线还是离线,都有相同的警报窗口INTERNET出现。你可以帮忙修改代码吗?小提琴如下,随时修改。

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

非常感谢。

1 个答案:

答案 0 :(得分: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之前绑定事件,否则事件可能在绑定之前发生。