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

내가 인터넷에 연결되어 있는지 또는 오프라인 상태인지에 상관없이 인터넷에 동일한 알림 창이 표시됩니다. 코드 수정을 도와 주시겠습니까? 바이올린은 아래에서 구할 수 있으며, 자유롭게 수정할 수 있습니다.

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

많은 감사합니다.

+8

오류가 발생하기 전에 반환이 이루어 지므로 항상 오류가 발생합니다. 비동기 프로그래밍에 오신 것을 환영합니다! –

+0

안녕 케빈. 귀하의 조언에 감사드립니다. 고칠 수있게 도와 주시겠습니까? – qqruza

+0

onError/onSuccess 핸들러의 경고? 그리고 이것은 Java가 아닌 javaSCRIPT입니다. 언어와 플랫폼이 전적으로 다릅니다. – Gimby

답변

6

이벤트를 처리 할 때 일반적으로 콜백을 사용하려고합니다. 오류 콜백이 실행되는 기회가 전에 반환이 일어나고 있기 때문에

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); 

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

그렇지 않으면, 당신은 항상 true을 얻을 것이다.

또한 onload 및 onerror 이벤트를 처리 할 때 src를 설정하기 전에 항상 이벤트를 바인딩해야합니다. 그렇지 않으면 이벤트를 바인딩하기 전에 이벤트가 발생할 수 있습니다.

+0

이것이 제가 전문성이라고 부르는 것입니다! 고마워요 케빈 – qqruza

+0

안녕 케빈, 이미지를 캐싱하지 못하게하는 방법이 있습니까? – qqruza

+1

예,'$ .now()'를 추가하십시오. 'img.src = theurl + "? _ ="+ $ .now()' –

관련 문제