回发期间检测Javascript

回发期间检测Javascript,javascript,asp.net,Javascript,Asp.net,我在我的ASP.NET Web表单站点上实现了一个系统,用于向客户端传递通知。通知可以是验证消息、成功消息、警告、错误等。这些消息由服务器端的代码生成,然后通过客户端的脚本从服务器检索并显示 在我的站点的每个页面上,我都嵌入了一个JavaScript函数,该函数通过jQueryAjax调用web服务(在服务器端),并请求最新的通知。如果有通知,则使用显示通知。在服务器端,已发送到客户端的消息将从队列中删除 这很有效。但是,假设我在一个名为NewEmployee.aspx的页面上,他们通过填写一个

我在我的ASP.NET Web表单站点上实现了一个系统,用于向客户端传递通知。通知可以是验证消息、成功消息、警告、错误等。这些消息由服务器端的代码生成,然后通过客户端的脚本从服务器检索并显示

在我的站点的每个页面上,我都嵌入了一个JavaScript函数,该函数通过jQueryAjax调用web服务(在服务器端),并请求最新的通知。如果有通知,则使用显示通知。在服务器端,已发送到客户端的消息将从队列中删除

这很有效。但是,假设我在一个名为NewEmployee.aspx的页面上,他们通过填写一个新表单来创建一个新员工,这会生成某种通知,例如“使用ID 58478创建的新员工”,并将他们带到ViewEmployee.aspx页面。如果回发速度足够慢,则当用户仍在NewEmployee.aspx上但在用户到达ViewEmployee.aspx之前,消息将开始显示。最终的结果是,通知仅显示一秒钟,用户从未看到它

我需要在客户端使用JavaScript来检测页面是否正在执行回发。如果我有,我可以阻止它在回发期间调用webservice,并让它等待它完成。我希望它看起来像这样

setInterval(oneSecondFunction, 1000); //check for messages every 1 second

function oneSecondFunction()
{
   var IsPostingBackRightNow=GetIsPostingBackStatus(); //I need your help writing this function
   if(!IsPostingBackRightNow)
   {
      $.ajax({
         type: 'POST',
         url: 'myurl/MessageService.asmx/GetCurrentMessage',
         contentType: 'application/json; charset=utf-8',
         data: JSON.stringify({ sessionid: sessionid, locale: 'en-US' }),
         dataType: 'xml',
         success: function (msg)
         {
            //show message via noty if there's a message
         }
     });
   }
}

回发是从
表单
传递的,因此您可以捕获表单上的
onsubmit
事件,并在那里打开您的标志

这里是如何。。。将其添加到代码后面

Page.Form.Attributes[“onsubmit”]=“return-GoForPostBack();”

要在窗体上也呈现此属性

<form ... onsubmit="return GoForPostBack();">

回发是从
表单
传递的,因此您可以捕获表单上的
onsubmit
事件,并在那里打开您的标志

这里是如何。。。将其添加到代码后面

Page.Form.Attributes[“onsubmit”]=“return-GoForPostBack();”

要在窗体上也呈现此属性

<form ... onsubmit="return GoForPostBack();">

我这样做了,它的工作!但是我没有直接在.master页上进行编辑,而是从代码隐藏中设置属性。这个小问题已经让我发疯好几个星期了,因为我一直在想基于C#的解决方案,而不是看客户端发生了什么。@msm8bball好的,是一样的。。。您还可以终止计时器而不使用标志。无论如何,这里的“关键”是
表单上的
onsubmit
,我保留计时器是因为我可以有一个管理员页面,在那里我可以发送blast通知,例如“站点将在5分钟内停机进行维护”,或者因为如果我在某处使用UpdatePanel,用户可能会导致异步回发消息。我希望消息几乎立即显示,而不是等待下一次回发。@msm8bball如果使用UpdatePanel,在UpdatePanel之后更新其内容,则需要清除标记。。。使用update Panel的客户端javascript,我做到了这一点,而且效果很好!但是我没有直接在.master页上进行编辑,而是从代码隐藏中设置属性。这个小问题已经让我发疯好几个星期了,因为我一直在想基于C#的解决方案,而不是看客户端发生了什么。@msm8bball好的,是一样的。。。您还可以终止计时器而不使用标志。无论如何,这里的“关键”是
表单上的
onsubmit
,我保留计时器是因为我可以有一个管理员页面,在那里我可以发送blast通知,例如“站点将在5分钟内停机进行维护”,或者因为如果我在某处使用UpdatePanel,用户可能会导致异步回发消息。我希望消息几乎立即显示,而不是等待下一次回发。@msm8bball如果使用UpdatePanel,在UpdatePanel之后更新其内容,则需要清除标记。。。使用更新面板的客户端javascript