Javascript - 使用按钮确定是否在线

时间:2014-03-28 14:20:13

标签: javascript asp.net

我正在研究能够检测是否存在与互联网连接的内容。这可以通过ping图像文件来查看它是否存在。虽然代码作为一个整体有效,但我希望它不会回发,如果它是离线的(因为它是一个将在线托管的页面 - 所以如果它在离线时回发,那么它会重新加载页面并执行"页面未找到"),但仍然显示"离线"消息:

<asp:Button ID="Button1" runat="server" OnClientClick="ifServerOnline()" Text="Button" />

        <script type="text/javascript">
            function ifServerOnline(ifOnline, ifOffline)
            {
                var img = document.body.appendChild(document.createElement("img"));
                img.onload = function ()
                {
                    ifOnline && ifOnline.constructor == Function && ifOnline();
                };
                img.onerror = function ()
                {
                    ifOffline && ifOffline.constructor == Function && ifOffline();
                };
                img.src = "http://www.mypage.com/pixel.jpg?" + Date.now;
            }

            ifServerOnline(function ()
            {
                alert("Online");
            },
            function ()
            {
                alert("Offline");
            });
        </script>

显然mypage.com并不存在(除非确实存在,但它不是我的)。

编辑 - 最终代码:

<asp:Button ID="Button1" runat="server" OnClientClick="return ifServerOnline(ifServerOnline1, ifServerOffline1);" Text="Button" />

        <script type="text/javascript">
            function ifServerOnline(ifOnline, ifOffline)
            {
                var img = document.body.appendChild(document.createElement("img"));
                img.onload = function ()
                {
                    ifOnline && ifOnline.constructor == Function && ifOnline();
                };
                img.onerror = function ()
                {
                    ifOffline && ifOffline.constructor == Function && ifOffline();
                };
                img.src = "http://www.mypage.com/pixel.jpg?" + Date.now;
                return false;
            }

            function ifServerOnline1()
            {
                alert("Online");
                return false;
            }
            function ifServerOffline1()
            {
                alert("Offline");
                return false;
            }
        </script>

1 个答案:

答案 0 :(得分:1)

常见方法只是在处理程序的末尾返回false以防止默认控件的行为(如果是按钮,则是发布表单):

function ifServerOnline(ifOnline, ifOffline)
{
    ...

    return false;
}

此外,您可能需要将此用于客户端点击处理程序(确保将参数传递给ifServerOnline函数:

OnClientClick="return ifServerOnline(ifServerOnline, ifServerOffline);"

最后一件事。此方法确保在完全单击后没有回发。如果您仍希望在在线情况下进行回发 - 您可能必须在ifServerOnline处理程序中手动执行此操作。

更新。跟进评论讨论 - 为您定义回调函数的最简单方法是:

function ifServerOnline()
{
    alert("Online");
}

function ifServerOffline()
{
    alert("Offline");
}