在使用asp.net身份验证登录表单之前,我使用以下代码检查用户是否具有活动的Internet连接。如果checkOnline()
脚本检测到活动的Internet连接,我只希望客户端表单身份验证请求通过。
此代码工作正常,但我讨厌使用async: false
,因为它会锁定浏览器大约20秒,直到请求超时。通常我只会添加timeout
设置,但在使用async: false
时,此设置不可用。
我已经考虑过每隔5秒左右轮询一次连接,然后在按钮上添加一个禁用属性,但我觉得这个效率非常低,而且更喜欢检查用户提交登录表单的内容。
有什么可以替代解决方案?
Protected Sub Page_PreInit(sender As Object, e As System.EventArgs) Handles Me.PreInit
Page.ClientScript.RegisterOnSubmitStatement(Me.GetType, "OnSubmitScript", "return checkOnline()")
End Sub
// CHECK ONLINE CONNECTIVITY
function checkOnline() {
isConnected = null;
$.ajax({
url: '/',
async: false
}).done(function(isAdmin) {
isConnected = true;
}).fail(function (e) {
isConnected = false;
connectionError();
});
return isConnected;
}
答案 0 :(得分:0)
怎么样:
function checkOnline() {
$.ajax({
url: '/',
async: true
}).done(function(isAdmin) {
callPostback();
}).fail(function (e) {
connectionError();
});
$("#lblPrompt").val("Please wait while we verify your Internet connection...");
return false;
}
然后
callPostback()
{
document.forms.form1.submit();
}
如果表单名称不同,则需要创建lblPrompt并将form1更改为正确的名称。
这样,用户将看到该消息并且您的页面未被锁定,并且在确认互联网连接时将发布表单。