如何使用jQuery检查是否有一个互联网连接?这样我就可以设置一些条件,比如“在制作过程中使用谷歌缓存版本的JQuery,在开发过程中使用谷歌缓存版本或本地版本,这取决于互联网连接”。


当前回答

一个更简单的解决方案:

<script language="javascript" src="http://maps.google.com/maps/api/js?v=3.2&sensor=false"></script>

之后在代码中:

var online;
// check whether this function works (online only)
try {
  var x = google.maps.MapTypeId.TERRAIN;
  online = true;
} catch (e) {
  online = false;
}
console.log(online);

当没有联机时,谷歌脚本将不会被加载,从而导致抛出异常的错误。

其他回答

发送XHR请求很糟糕,因为如果特定的服务器宕机,它可能会失败。相反,使用google的API库来加载他们的jQuery缓存版本。

你可以使用google API在加载jQuery后执行回调,这将检查jQuery是否加载成功。类似下面的代码应该可以工作:

<script type="text/javascript">
    google.load("jquery");

    // Call this function when the page has been loaded
    function test_connection() {
        if($){
            //jQuery WAS loaded.
        } else {
            //jQuery failed to load.  Grab the local copy.
        }
    }
    google.setOnLoadCallback(test_connection);
</script>

谷歌API文档可以在这里找到。

您可以模拟Ping命令。

使用Ajax请求一个时间戳到你自己的服务器,定义一个计时器使用setTimeout到5秒,如果没有响应它再试一次。

如果4次尝试都没有响应,你可以假设网络坏了。

所以你可以每隔一到三分钟就检查一下。

对我来说,这似乎是一个很好的干净的解决方案。

好吧,也许在游戏中有点晚了,但是用在线图像检查怎么样? 我的意思是,OP需要知道他是否需要抓取谷歌CMD或本地JQ副本,但这并不意味着浏览器无论如何都不能读取Javascript,对吧?

<script>
function doConnectFunction() {
// Grab the GOOGLE CMD
}
function doNotConnectFunction() {
// Grab the LOCAL JQ
}

var i = new Image();
i.onload = doConnectFunction;
i.onerror = doNotConnectFunction;
// CHANGE IMAGE URL TO ANY IMAGE YOU KNOW IS LIVE
i.src = 'http://gfx2.hotmail.com/mail/uxp/w4/m4/pr014/h/s7.png?d=' + escape(Date());
// escape(Date()) is necessary to override possibility of image coming from cache
</script>

这只是我的小意思

5年后的版本:

今天,如果你不想深入了解本页所描述的不同方法的细节,就可以找到适合你的JS库。

其中一个是https://github.com/hubspot/offline。它检查预定义URI的连通性,默认情况下是您的favicon。当用户的连接重新建立时,它会自动检测,并提供up和down等整洁的事件,您可以将其绑定以更新UI。

我有一个解决办法,在这里工作,检查是否有网络连接:

$.ajax({
    url: "http://www.google.com",
    context: document.body,
    error: function(jqXHR, exception) {
        alert('Offline')
    },
    success: function() {
        alert('Online')
    }
})