如何使用AJAX来检测是否正在处理异步请求

在本文中,您将学习如何使用AJAX来检测调用另一个请求时是否仍在处理异步请求。 这样,我们可以通知用户,并允许在开始另一个请求之前先完成第一个请求。

为了演示这一点,我们将创建两个UpdatePanels,每个UpdatePanels显示一个当前日期和时间,并带有一个按钮。 每个按钮在单击时都会更新自己的UpdatePanel。 但是,当单击第一个按钮时,我们将有目的地使该过程花费3秒钟来完成,从而使我们有足够的时间单击第二个按钮进行测试。 在第一个仍在处理中的同时单击第二个按钮时,应通知我们某个进程仍处于活动状态,并且不允许第二个进程启动。

首先添加ScriptManager和两个UpdatePanels:


<form id="form1" runat="server">
<asp:ScriptManager ID="SM1" runat="server" /> 
<asp:UpdatePanel ID="UP1" runat="server" UpdateMode="Conditional">
<ContentTemplate> 
</ContentTemplate>
</asp:UpdatePanel> 
<br /><br />
<asp:UpdatePanel ID="U2" runat="server" UpdateMode="Conditional">
<ContentTemplate> 
</ContentTemplate>
</asp:UpdatePanel>
<br /><br />
</form> 
注意,我们在两个面板上都将UpdateMode设置为Conditional。 这是因为我们不希望它们都同时更新-每个按钮应仅更新自己的UpdatePanel。

让我们继续并将按钮和当前时间添加到UpdatePanels:


<asp:UpdatePanel ID="UP1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%= DateTime.Now.ToString() %>
<br />
<asp:Button ID="btn_GetTime1" runat="server" Text="Get Time (1)" OnClick="btn_GetTime1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<br /><br /> <asp:UpdatePanel ID="U2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%= DateTime.Now.ToString() %>
<br />
<asp:Button ID="btn_GetTime2" runat="server" Text="Get Time (2)" />
</ContentTemplate>
</asp:UpdatePanel> 
现在在后面的代码中,在第一个按钮的click事件中,我们将故意使线程休眠3秒。 像这样

using System.Threading; 
.. 
protected void btn_GetTime1_Click(object sender, EventArgs e)
{
Thread.Sleep(3000);
} 
为了使请求更直观,我们也将UpdateProgress添加到混合中。 这将在请求正在进行时向我们显示:

<asp:UpdateProgress ID="UPr1" runat="server" AssociatedUpdatePanelID="UP1">
<ProgressTemplate>
<br /><br />
Please wait..
</ProgressTemplate>
</asp:UpdateProgress> 
我们还将包含一些JavaScript,以检查Async PostBack当前是否正在进行中。 为此,请添加以下脚本:

<script type="text/javascript">
var instance = Sys.WebForms.PageRequestManager.getInstance();
instance.add_initializeRequest(instance_initializeRequest); 
function instance_initializeRequest(sender, args) {
if (instance.get_isInAsyncPostBack()) {
alert('Still processing request. Please wait..');
args.set_cancel(true);
}
}
</script> 
ASPX页面将如下所示:

<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="SM1" runat="server" /> 
<asp:UpdatePanel ID="UP1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%= DateTime.Now.ToString() %>
<br />
<asp:Button ID="btn_GetTime1" runat="server" Text="Get Time (1)" OnClick="btn_GetTime1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UPr1" runat="server" AssociatedUpdatePanelID="UP1">
<ProgressTemplate>
<br /><br />
Please wait..
</ProgressTemplate>
</asp:UpdateProgress>
<br /><br />
<asp:UpdatePanel ID="U2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%= DateTime.Now.ToString() %>
<br />
<asp:Button ID="btn_GetTime2" runat="server" Text="Get Time (2)" />
</ContentTemplate>
</asp:UpdatePanel>
<br /><br />
</form>
</body>
</html>
<script type="text/javascript">
var instance = Sys.WebForms.PageRequestManager.getInstance();
instance.add_initializeRequest(instance_initializeRequest); 
function instance_initializeRequest(sender, args) {
if (instance.get_isInAsyncPostBack()) {
alert('Still processing request. Please wait..');
args.set_cancel(true);
}
}
</script> 

From: https://bytes.com/topic/asp-net/insights/942054-how-use-ajax-detect-if-asynchronous-request-being-processed

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值