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()函数返回一个延迟对象,而我只需要一个真/假的答案.谁能告诉我如何实现这个目标?
$.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)
小智 5
100%工作:
function checkconnection() {
var status = navigator.onLine;
if (status) {
alert('Internet connected !!');
} else {
alert('No internet Connection !!');
}
}
Run Code Online (Sandbox Code Playgroud)