Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查是否连接到网络;jQuery_Jquery_Html - Fatal编程技术网

检查是否连接到网络;jQuery

检查是否连接到网络;jQuery,jquery,html,Jquery,Html,我搜索了StackOverflow,看到了关于如何实现这一点的各种主题,但没有任何真正与我的具体情况相关的内容。我正在(为一个类)编写一个移动“应用程序”(使用HTML5、CSS、jQuery)。它最终将成为一个独立的“应用程序”,它将包含所有所需文件的本地副本。在我的一个页面上,我有一个提交表单,由于用户脱机时无法提交表单,我希望该页面重定向到自定义404页面 我只是想看看是否有办法在jQuery中实现这一点,因为我还没有真正找到任何方法 谢谢您可以使用 if (navigator.onLin

我搜索了StackOverflow,看到了关于如何实现这一点的各种主题,但没有任何真正与我的具体情况相关的内容。我正在(为一个类)编写一个移动“应用程序”(使用HTML5、CSS、jQuery)。它最终将成为一个独立的“应用程序”,它将包含所有所需文件的本地副本。在我的一个页面上,我有一个提交表单,由于用户脱机时无法提交表单,我希望该页面重定向到自定义404页面

我只是想看看是否有办法在jQuery中实现这一点,因为我还没有真正找到任何方法

谢谢

您可以使用

if (navigator.onLine) {
    // I'm online so submit the form.
}

您可以检查
navigator.onLine
属性,也可以收听
离线
/
在线
事件:

$(document).on('offline online', function (event) {
    alert('You are ' + event.type + '!');
});
资料来源:

以下是这些活动的一些MDN文档:


我自己对这些事件并不熟悉,但如果您阅读上述链接,您会发现很多好信息。

以下是我将要做的,基于:

首先,使用javascript库链接确定用户是否在线。如果为true,请将窗体的操作属性更改为联机页,否则更改为脱机页

    <script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js></script>
    <script>
$('#target').submit(function() {
   if (typeof window.$ !== 'function') {
    $('myform').attr( "action" , "offlinepage.html"  );
   }
   else
   {
    $('myform').attr( "action" , "onlinepage.html"  );
   }
});
    </script>

实际上,您根本不需要jQuery。HTML5本身有一个整洁的设施,用于在在线/离线条件下运行的应用程序。缓存清单是在
标记的
清单
属性中引用的纯文本文件:

<html manifest="cache.manifest">
在使用清单时,浏览器首先查阅清单,在不编写任何脚本的情况下,根据在线或离线情况采取相应的行动

更新:

请注意响应内容类型的关键要求。纯文本根本不起作用

必须使用
文本/缓存清单
MIME类型提供清单


还要注意,清单中未列出的所有URL都会因此被阻止加载。这就是为什么我用通配符(
*
)修复了上面的清单,以允许“其余的”。这可能会帮助您开始。

尝试将ajaxSetup设置为每n毫秒执行一次请求(我在这里输入1000),并检查它是否超时,然后禁用按钮

$.ajaxSetup({
    timeout: 1000, 
    error: function(request, status, maybe_an_exception_object) {
        if(status != 'timeout')
            //Code to enable button
        else
             //Code to disable button
    }
});

使用
window.navigator.onLine
本身是不可靠的,因为用户可能已连接到网络,但该网络无法访问internet

然而,这里有一个简单的例子

<!DOCTYPE HTML>
<html>
 <head>
  <title>Online status</title>
  <script>
   function updateIndicator() {
     document.getElementById('indicator').textContent = navigator.onLine ? 'online' : 'offline';
   }
  </script>
 </head>
 <body onload="updateIndicator()" ononline="updateIndicator()" onoffline="updateIndicator()">
  <p>The network is: <span id="indicator">(state unknown)</span>
 </body>
</html>​

在线状态
函数updateIndicator(){
document.getElementById('indicator')。textContent=navigator.onLine?'onLine':'offline';
}
网络为:(状态未知)
​

查看小提琴的动作:

我正在使用以下代码检查连接。注意:上述解决方案均不适用于Firefox,Firefox依赖于其内部“脱机工作”状态:

// Register listeners
window.addEventListener("offline", function(){
    $('#globalDiv').hide();
    $("#message").html('WARNING: Internet connection has been lost.').show();
});
window.addEventListener("online", function(){
    $("#message").empty().hide();
    $('#globalDiv').show();
});

我按你说的做了;在if/else中发出警报。如果我禁用我的网络连接来测试else,if会像我预期的那样完美工作,它会失败,并且仍然显示if语句中显示的内容。它不是傻瓜式的,它从浏览器中获取数据。它只显示您是否处于
脱机
模式,我正在寻找一种方法来检查您是否可以访问internet。这看起来是一种干净的方法,但是这些事件在所有浏览器中都有效吗?绝对不是:)。这是使用HTML5特定事件,这还不是官方规范。这里是指向MDN站点的链接,用于
navigator.onLine
:(浏览器支持位于底部)@ToddMoses我必须测试它以确保它有效,但Todd Moses的答案似乎是一个很好的答案。但是您可以使用一个小的资源来加载,而不是整个框架。例如,您可以托管自己的JS文件,该文件只向全局范围添加一个标志,如果该标志存在,则用户处于联机状态。为了确保JS文件没有被缓存,你必须正确地设置文件的标题,使其始终刷新。有趣的是……这可能就是我所寻找的……假设我有5个网页(index.html、contact.html、about.html、rates.html、reserve.html),并且无论发生什么情况,索引都将与about页面一起显示。当我离线时,我想链接到自定义404页面的联系人、预订和费率;我该怎么做呢?我给了你奖金,因为即使我无法让你的解决方案在我的普通浏览器上运行,我相信如果我严格为移动设备编码,这是一个好办法。@Brendan,缓存清单也在普通桌面浏览器上运行,并且以同样的方式运行。我用公共内容类型gotcha再次更新了答案,因为我最近发现,缓存清单的行为基本上类似于防火墙,您必须告诉防火墙实际允许哪些网络资源,我使用了通配符来允许您的所有资源,否则它们将被阻止。您只需选择要缓存的其中一个,并将其列在清单中。@vishwanath刚刚进行了双重检查,所有三个链接都正常工作。哎呀,一段时间后它会进行一些重定向,我没有等那么久。谢谢你的回复。当你有很多客户时,这可能会导致一些严重的连接开销。对一个3年前有效的答案投了反对票。:)截至2015年,如果您希望使用简单事件,此答案似乎是最可靠的。在没有网络连接的情况下浏览页面时,如何在每个页面中重新初始化此答案。这是工作,但我需要允许通过网页导航是否有网络。此外,我需要在每个页面中显示“无网络”消息。您可以在页面顶部显示“无网络”消息作为横幅,而不是阻止整个页面,但在没有网络时允许导航是另一个主题。为此,您需要在本地缓存页面。HTML5对此有一个机制(缓存清单),请参考以下内容:
// Register listeners
window.addEventListener("offline", function(){
    $('#globalDiv').hide();
    $("#message").html('WARNING: Internet connection has been lost.').show();
});
window.addEventListener("online", function(){
    $("#message").empty().hide();
    $('#globalDiv').show();
});