我正在研究能够检测是否存在与互联网连接的内容。这可以通过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>
答案 0 :(得分:1)
常见方法只是在处理程序的末尾返回false以防止默认控件的行为(如果是按钮,则是发布表单):
function ifServerOnline(ifOnline, ifOffline)
{
...
return false;
}
此外,您可能需要将此用于客户端点击处理程序(确保将参数传递给ifServerOnline
函数:
OnClientClick="return ifServerOnline(ifServerOnline, ifServerOffline);"
最后一件事。此方法确保在完全单击后没有回发。如果您仍希望在在线情况下进行回发 - 您可能必须在ifServerOnline
处理程序中手动执行此操作。
更新。跟进评论讨论 - 为您定义回调函数的最简单方法是:
function ifServerOnline()
{
alert("Online");
}
function ifServerOffline()
{
alert("Offline");
}