在回发期间检测Javascript

时间:2013-12-12 20:18:45

标签: javascript asp.net

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

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

这非常有效。但是,假设我在一个名为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
         }
     });
   }
}

1 个答案:

答案 0 :(得分:1)

回帖是从form传来的,因此您可以捕获表单上的onsubmit事件,并在那里打开您的标记。

以下是如何...在

背后的代码上添加

Page.Form.Attributes["onsubmit"] = "return GoForPostBack();";

也可以在表单上呈现此属性...

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

和javascript

var IsPostingBackRightNow = false;
function GoForPostBack()
{        
    IsPostingBackRightNow = true;
    return true;
}


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

function oneSecondFunction()
{
   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
         }
     });
   }
}