使用jquery检查互联网连接

Check Internet connectivity with jquery

本文关键字:连接 互联网 检查 jquery 使用      更新时间:2023-09-26

我正试图通过向服务器发送GET请求来检查互联网连接。我是jquery和javascript的初学者。我的代码不使用navigator.onLine,因为它在不同的浏览器中的工作方式不同。这是我迄今为止的代码:

var check_connectivity={
        is_internet_connected : function(){
            var dfd = new $.Deferred();
            $.get("/app/check_connectivity/")
            .done(function(resp){
                return dfd.resolve();
            })
            .fail(function(resp){
                return dfd.reject(resp);
            })
            return dfd.promise();
        },
}

我在不同的文件中称此代码为:

if(!this.internet_connected())
        {
            console.log("internet not connected");
            //Perform actions
        }
internet_connected : function(){
        return check_connectivity.is_internet_connected();
},

is_internet_connected()函数返回一个延迟对象,而我只需要一个true/false的答案。有人能告诉我如何做到这一点吗?

$.get()返回一个与promise兼容的jqXHR对象,因此无需创建自己的$.Deferred

var check_connectivity = {
    ...
    is_internet_connected: function() {
        return $.get({
            url: "/app/check_connectivity/",
            dataType: 'text',
            cache: false
        });
    },
    ...
};

然后:

check_connectivity.is_internet_connected().done(function() {
    //The resource is accessible - you are **probably** online.
}).fail(function(jqXHR, textStatus, errorThrown) {
    //Something went wrong. Test textStatus/errorThrown to find out what. You may be offline.
});

正如你所看到的,不可能确定你是在线还是离线。javascript/jQuery只知道资源是否被成功访问。

一般来说,了解资源是否被成功访问(以及响应是否很酷)比了解您的在线状态更有用。每个ajax调用都可以(也应该)有自己的.done().fail()分支,无论请求的结果如何,都可以采取适当的操作。

你的意思是检查互联网连接是否已连接?

如果是的话,试试这个:

$.ajax({
    url: "url.php",
    timeout: 10000,
    error: function(jqXHR) { 
        if(jqXHR.status==0) {
            alert(" fail to connect, please check your connection settings");
        }
    },
    success: function() {
        alert(" your connection is alright!");
    }
});

100%工作:

function checkconnection() {
    var status = navigator.onLine;
    if (status) {
        alert('Internet connected !!');
    } else {
        alert('No internet Connection !!');
    }
}

这段代码将继续监控互联网连接点击下面的"运行代码片段"按钮,查看它的实际操作。

function checkInternetConnection(){
        var status = navigator.onLine;
        if (status) {
            console.log('Internet Available !!');
        } else {
            console.log('No internet Available !!');
        }  
        setTimeout(function() {
            checkInternetConnection();
        }, 1000);
      }
//calling above function
checkInternetConnection();

try this 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
 if (! window.jQuery) {
 alert('No internet Connection !!');
  }
 else {
 // internet connected
 }

用于检测Internet连接的Jquery插件

它对我来说很好。

   <div id="status"></div>

    <script>
     window.addEventListener("offline", (event) => {
      const statusDisplay = document.getElementById("status");
      statusDisplay.textContent = "OFFline";
    });
    window.addEventListener("online", (event) => {
      const statusDisplay = document.getElementById("status");
      statusDisplay.textContent = "Online";
    });
  </script>

您不能得到简单的true或false作为回报,请给它们一个回调处理程序

function is_internet_connected(callbackhandler)
{
$.get({
  url: "/app/check_connectivity/",
  success: function(){
     callbackhandler(true);
  },
  error: function(){
     callbackhandler(false);
  },
  dataType: 'text'
});
}

根据W3C,我只使用navigator onLine属性http://www.w3schools.com/jsref/prop_nav_online.asp

但仅导航器告诉我们浏览器是否具有互联网功能(连接到路由器、3G等)。因此,如果返回false,则您可能处于脱机状态,但如果返回true,则如果网络出现故障或速度非常慢,则您仍然可以处于脱机状态。现在是检查XHR请求的时候了。

setInterval(setOnlineStatus(navigator.onLine), 10000);
function setOnlineStatus(online)
{
    if (online) {
    //Check host reachable only if connected to Router/Wifi/3G...etc
        if (hostReachable())
            $('#onlineStatus').html('ONLINE').removeAttr('class').addClass('online');
        else
            $('#onlineStatus').html('OFFLINE').removeAttr('class').addClass('offline');
    } else {
        $('#onlineStatus').html('OFFLINE').removeAttr('class').addClass('offline');
    }
}
function hostReachable()
{
    // Handle IE and more capable browsers
    var xhr = new (window.ActiveXObject || XMLHttpRequest)("Microsoft.XMLHTTP");
    var status;
    // Open new request as a HEAD to the root hostname with a random param to bust the cache
    xhr.open("HEAD", "//" + window.location.hostname + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false);
    // Issue request and handle response
    try {
        xhr.send();
        return (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304));
    } catch (error) {
        return false;
    }
}

编辑:如果端口号不同于80,请使用端口号,否则会失败。

xhr.open("HEAD", "//" + window.location.hostname + ":" + window.location.port + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false);