我正在尝试通过向服务器发送 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()
函数返回一个延迟对象,而我只需要一个真/假的答案。谁能告诉我如何实现这一点?
最佳答案
$.get()
返回一个 jqXHR 对象,它与 promise 兼容 - 因此无需创建您自己的 $.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()
分支,无论请求的结果如何,都可以采取适当的操作。
关于javascript - 使用 jquery 检查 Internet 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20043215/