如何检查用户连通性



我正在编写一个小的web应用程序,想在允许用户提交数据之前检查用户的连接。

      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不工作。

你有什么建议吗?

提前感谢!

您的函数在检查完成之前返回。记住,JavaScript是事件驱动的。下面是一个潜在的修复(未测试):

// when connected, call the callback
function testConnection(callback) {
 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");
 }
 xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    document.getElementById("checkingConnectivity").style.display = "none";
    if (callback) {
      callback(xmlhttp);
    }
  }
 }
 connIterator = connIterator + 1;
 xmlhttp.open("GET","testConnection.jsp?i="+connIterator,true); // Dynamic URL to prevent caching
 xmlhttp.send();
}

document.getElementById("noConnectivity").style.display = "block";
document.getElementById("checkingConnectivity").style.display = "none";
testConnection(function() {
  // this code will run when the connection succeeds
  document.getElementById("noConnectivity").style.display = "none";
});

navigator.onLine。规范说:

如果用户代理确定脱机(已断开连接)则返回false从网络)。如果用户代理可能在线,则返回true。

当this的值为时触发在线和离线事件属性改变。

navigator。属性必须返回false,如果用户代理会不会联系网络当用户跟随链接或者当一个脚本请求一个远程页面(或者知道这样的尝试将会失败)失败),否则必须返回true。

问题在于它不那么可靠,因为计算机可能有网络连接,但不能访问internet。

相关内容

  • 没有找到相关文章

最新更新