我在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
}
});
}
}
答案 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
}
});
}
}