2013-02-07 30 views
0

我使用下面的脚本通过下载image test.png来检查Internet连接。我遇到的问题是它只会下载一次图像。这意味着,如果在第一次加载页面时有互联网连接,它将显示“在线” - 但是,如果我断开网络电缆,它将不会像它应该那样说“离线”。无法每5秒下载一次图像

基本上,一旦下载,readyState将永远是'complete' - 但是,我想要一次又一次地执行测试。

<script type="text/javascript"> 
setInterval('checkimage()', 1000); 

function checkimage() { 
    var imgTmp = new Image(); 
    imgTmp.src = 'test.png'; 
    if (imgTmp.readyState == 'complete') { 
     document.getElementById('div1').innerHTML = "<font size=15 face=ariel color=green>Online</font>"; 
    } else { 
     document.getElementById('div1').innerHTML = "<font size=15 face=ariel color=red>Offline</font>"; 
    } 
} 
</script> 

任何帮助将不胜感激!

+0

它应该是'的setInterval( 'checkimage',1000);'没有括号 – asifsid88

+0

@ asifsid88不,你错了。或者作为带有paranthesis(错误和错误的方式)的字符串'setInterval(“checkimage()”,1000)'或函数本身没有paranthesis并且引用'setInterval(checkimage,1000)'(正确的方式) – Andreas

+0

@Andreas ooops! !我的错。我也错过了报价。真正!即使引号不应该在那里,因为我们只是通过指针 – asifsid88

回答

1

的问题与解决方案是,你设置源后立即检查readyState。改为使用loaderror事件。

function checkimage() { 
    var imgTmp = new Image(); 
    imgTmp.onload = function() { 
     printState("Online"); 
    }; 
    imgTmp.onerror = function() { 
     printState("Offline"); 
    }; 
    imgTmp.src = "test.png?_=" + (+new Date()); 
} 

function printState(state) { 
    document.getElementById("div1").innerHTML = "<span style=\"font-size:15;font-face:'Arial'; color:green\">" + state + "</span>"; 
    setTimeout(checkimage, 5000); 
} 

不要使用字符串作为第一个参数为setTimeoutsetInterval

2

我害怕的整体解决方案,但如果你想强制下载,这是避免高速缓存中,则可以替换

imgTmp.src = 'test.png'; 

imgTmp.src = 'test.png?t='+(new Date().getTime()); 
+0

我试过你的解决方案。它总是会说离线 - 因为文件“test.png?t ='+(new Date()。getTime());”不存在。 – Homie

+0

胡?你的服务器是什么?有参数时是不是可以获取文件? –

+0

@EliUnger:'?'引入了一个查询字符串。它不是磁盘上文件名的一部分。 –