AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序
测试代码:
- 测试代码如下:
- <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Test.aspx.cs"Inherits="AjaxCtpWebDemo.Test"%>
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <headrunat="server">
- <title>无标题页</title>
- </head>
- <body>
- <formid="form1"runat="server">
- <asp:ScriptManagerID="ScriptManager1"runat="server">
- </asp:ScriptManager>
- <%=DateTime.Now.ToString()%><hr/>
- <asp:UpdatePanelID="UpdatePanel1"runat="server">
- <ContentTemplate>
- <%=DateTime.Now.ToString()%>
- <hr/>
- <asp:ButtonID="Button1"runat="server"Text="Button"/>
- </ContentTemplate>
- </asp:UpdatePanel>
- <mce:scripttype="text/javascript"language="javascript"><!--
- Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
- function(sender,e)
- {
- alert("add_initializeRequest");
- }
- );
- Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
- alert("add_endRequest");
- }
- );
- Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(
- function(sender,e){
- alert("add_beginRequest");
- Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(
- alert("add_pageLoaded");
- Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(
- alert("add_pageLoading");
- //--></mce:script>
- </form>
- </body>
- </html>
最终结果如下:
1.页面第一次进入时,会首先激发add_pageLoaded事件
2.异步提交时,事件的激发顺序如下:
add_initializeRequest
add_beginRequest
add_pageLoading
add_pageLoaded
add_endRequest
add_pageLoaded
转:http://www.cnblogs.com/fifastar/archive/2008/06/02/1212225.html
获取PageRequestManager的实例:var prm = Sys.WebForms.PageRequestManager.getInstance();
属性prm.get_isInAsyncPostBack():判断一个异步回送是否正在进行中
方法prm.abortPostBack():把一个正在执行中的异步回送取消。
客户端页面的生命周期
1、initializeRequest:
触发时机:当一个异步请求的回送被初始化之前引发。
添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initFunc);
移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_initializeRequest(initFunc);
initFunc是该页面初始化之前要执行的客户端方法。该方法的声明为:
function initFunc(sender,args)
{
//args的数据类型是:InitializeRequestEventArgs类型。
//args.get_postBackElement():取得初始化异步回送的元素对象。
//args.get_postBackElement().id取得初始化异步回送的元素对象的id号
//args.get_postBackElement().value取得初始化异步回送的元素对象的value值
//args.set_cancel(bool):取消初始化异步回送,即丢弃该异步回送。
}
如果异步处理的过程比较慢,在异步处理的过程中再次发出同样的请求的话,那后者的异步处理请求会取消掉前一步未处理完的请求。这就是默认的异步请求优先级--“后者优先”。
我们通常回利用initailizeRequest事件来取消一个异步回送(正在进行的回送和将要初始化的回送)。