【发布时间】:2011-12-21 00:54:51
【问题描述】:
我正在编写一个小型网络应用程序,并希望在允许他提交数据之前检查用户的连接性。
function testConnection() {
var xmlhttp;
document.getElementById("checkingConnectivity").style.display = "block";
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var success = false;
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("noConnectivity").style.display = "none";
document.getElementById("checkingConnectivity").style.display = "none";
success = true;
}
}
connIterator = connIterator + 1;
xmlhttp.open("GET","testConnection.jsp?i="+connIterator,true); // Dynamic URL to prevent caching
xmlhttp.send();
// Wait 10 seconds
for(var i = 0; i < 10; i++) {
// If no success so far, keep waiting
if(!success) {
window.setTimeout('1000');
} else {
return true;
}
}
// success still isn't true, so we assume a timeout
document.getElementById("noConnectivity").style.display = "block";
document.getElementById("checkingConnectivity").style.display = "none";
return false;
}
问题是这个函数总是返回 false,即使文件是可访问的。
在window.setTimeout('1000'); 之前添加警报时它可以工作,所以我认为setTimeout 不起作用。
你有什么建议吗?
提前致谢!
【问题讨论】:
-
为什么在开发 web 应用程序时还要创建连接检查?
-
就我而言,可以肯定的是,用户可能会不时断开连接
-
这就是为什么我们有 HTTP 状态码 ;p
-
如果服务器根本无法访问,它也不会返回状态码:P
标签: javascript ajax timeout xmlhttprequest