使用jquery检查Internet连接

Gau*_*rav 11 javascript jquery jquery-deferred

我试图通过向服务器发送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();
        },
}
Run Code Online (Sandbox Code Playgroud)

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

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

is_internet_connected()函数返回一个延迟对象,而我只需要一个真/假的答案.谁能告诉我如何实现这个目标?

Bee*_*oot 9

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

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

然后 :

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.
});
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,无法确定您是在线还是离线.所有javascript/jQuery都知道资源是否被成功访问.

通常,了解资源是否成功访问(以及响应是否很酷)比了解您的在线状态本身更有用.每个Ajax调用可以(也应该)有它自己.done().fail()分支机构,允许采取适当行动的请求,无论结果如何.


小智 5

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

如果是这样,试试这个:

$.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!");
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 连接可能会在一段时间内断开,因此最好检查一下是否是这种情况。 (3认同)

小智 5

100%工作:

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

  • 错误的是,连接到无法访问互联网的路由器仍然会留下“true” (3认同)