2014-01-07 14 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); 

無論我在線還是離線,都有相同的警報窗口INTERNET出現。你能幫助解決這個問題嗎?小提琴可在下面找到,隨時修改它。

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

非常感謝。

+8

您的回報發生在發生錯誤之前,導致它始終返回true。歡迎來到異步編程! –

+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

這就是我所說的專業!謝謝凱文 – qqruza

+0

嗨凱文,有什麼辦法來防止緩存圖像? – qqruza

+1

是的,添加'$ .now()'。 'img.src = theurl +「?_ =」+ $ .now()' –