使用jquery检查Internet连接

我试图通过向服务器发送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()分支,允许采取适当的操作,无论请求的结果如何。

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

如果是这样,试试这个:

 $.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!"); } }); 

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

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

用于检测Internet连接的Jquery插件

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

但导航器只告诉我们浏览器是否具有互联网function(连接到路由器,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);