【问题标题】:Is there a way to tell the user that there's no internet connection when they press submit? [duplicate]有没有办法告诉用户在按下提交时没有互联网连接? [复制]
【发布时间】:2012-09-18 09:56:24
【问题描述】:

当然,假设没有互联网连接。像 jQuery 方法一样?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    我会尝试向您知道在线的几台服务器发出 HEAD 请求(不下载内容)。如果没有网络,它们会自动失败(无需设置超时)。

    $.ajax({
        type: "HEAD",
        url: 'http://www.google.com',
        error: function() {
            alert('world is gone !');
        }
    });
    

    DEMONSTRATION(拔下网络进行测试)

    【讨论】:

    • 这其实很不错。您不必在服务器逻辑上做额外的工作。在这里,有一个 +1 :)
    • 请注意,服务器必须允许跨域查询或者是源服务器。
    • 嗯,聪明,但我不认为这是必要的。检查navigator.onLine 应该就足够了——看我的回答。
    • 如果无法访问 google 会怎样?
    • 我不是在拿我的国家/地区的样本开玩笑,直到现在 4 天谷歌都无法访问
    【解决方案2】:

    如果您正在处理 ajax 请求,您可以捕获 timeout 错误 - 请参阅 $.ajax 参考中的 error(jqXHR, textStatus, errorThrown)

    【讨论】:

      【解决方案3】:

      有点,是的。在实际提交之前,您可以拨打ajax 尝试连接到您网站上的一个简单的轻量级服务,以检查它是否可以访问。

      如果调用失败,你可以假设没有连接。

      【讨论】:

        【解决方案4】:

        借助失败的 XHR 请求,您可以确定连接。 重试几次,如果请求没有通过,警告并优雅地失败。

        我可以使用我从http://jamiethompson.co.uk/web/2008/06/17/publish-subscribe-with-jquery/得到的这个功能

        $.networkDetection = function(url,interval){
            var url = url;
            var interval = interval;
            online = false;
            this.StartPolling = function(){
                this.StopPolling();
                this.timer = setInterval(poll, interval);
            };
            this.StopPolling = function(){
                clearInterval(this.timer);
            };
            this.setPollInterval= function(i) {
                interval = i;
            };
            this.getOnlineStatus = function(){
                return online;
            };
            function poll() {
                $.ajax({
                    type: "POST",
                    url: url,
                    dataType: "text",
                    error: function(){
                        online = false;
                        $(document).trigger('status.networkDetection',[false]);
                    },
                    success: function(){
                        online = true;
                        $(document).trigger('status.networkDetection',[true]);
                    }
                });
            };
        };
        

        【讨论】:

          【解决方案5】:

          一种方法是使用 AJAX 发送表单。然后你会有一个处理程序,它会告诉你它无法连接到服务器,你可以保存数据并通知用户服务器不可用。问题是您的互联网连接还是服务器可能已关闭并不重要。

          【讨论】:

            【解决方案6】:
            if (navigator.onLine) {
              alert('online');
            } else {
              alert('offline');
            }
            

            【讨论】:

            • 该属性跨浏览器不可靠ejohn.org/blog/offline-events
            • @JuanMendes 啊,所以其他人可以了解这一点,我不会删除我投反对票的答案 :) 另外,我应该阅读这部分讨论浏览器兼容性。 developer.mozilla.org/en-US/docs/DOM/…
            • 无论答案的准确性如何,您都应该始终解释您的代码以及我们为什么要使用它(通常一两句话就足够了。)
            猜你喜欢
            • 1970-01-01
            • 2021-03-21
            • 1970-01-01
            • 2013-02-23
            • 1970-01-01
            • 1970-01-01
            • 2017-08-21
            • 2019-11-12
            • 2017-01-07
            相关资源
            最近更新 更多