AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序

测试代码:

  1. 测试代码如下:
  2.  
  3. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="AjaxCtpWebDemo.Test" %>
  4.  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6.  
  7. <html xmlns="http://www.w3.org/1999/xhtml" >
  8. <head runat="server">
  9. <title>无标题页</title>
  10. </head>
  11. <body>
  12. <form id="form1" runat="server">
  13.  
  14. <asp:ScriptManager ID="ScriptManager1" runat="server">
  15. </asp:ScriptManager>
  16. <%=DateTime.Now.ToString() %><hr/>
  17. <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  18. <ContentTemplate>
  19. <%=DateTime.Now.ToString() %>
  20. <hr/>
  21. <asp:Button ID="Button1" runat="server" Text="Button" />
  22. </ContentTemplate>
  23. </asp:UpdatePanel>
  24. <mce:script type="text/javascript" language="javascript"><!--
  25. Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
  26. function(sender, e)
  27. {
  28. alert("add_initializeRequest");
  29. }
  30. );
  31.  
  32. Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
  33. function(sender,e){
  34. alert("add_endRequest");
  35. }
  36. );
  37.  
  38. Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(
  39. function(sender,e){
  40. alert("add_beginRequest");
  41. }
  42. );
  43.  
  44. Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(
  45. function(sender,e){
  46. alert("add_pageLoaded");
  47. }
  48. );
  49.  
  50. Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(
  51. function(sender,e){
  52. alert("add_pageLoading");
  53. }
  54. );
  55.  
  56. // --></mce:script>
  57.  
  58. </form>
  59. </body>
  60. </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事件来取消一个异步回送(正在进行的回送和将要初始化的回送)。

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3.  
  4. }
  5. protected void btnPrecedence_Click(object sender, EventArgs e)
  6. {
  7. Thread.Sleep(3000);
  8. Button button = sender as Button;
  9. Label1.Text = String.Format("您点击了“{0}”按钮", button.Text);
  10. }

protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnPrecedence_Click(object sender, EventArgs e)
{
Thread.Sleep(3000);
Button button = sender as Button;
Label1.Text = String.Format("您点击了“{0}”按钮", button.Text);
}

2、beginRequest:
       触发时机:在异步请求初始化完成,且向服务器提出请求之前引发。
       添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginFunc);
       移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(beginFunc);
           beginFunc是向服务器提出请求之前要执行的客户端方法。该方法的声明为:
           function beginFunc(sender,args)
           {
                //args的数据类型是:BeginRequestEventArgs类型。
                //args.get_postBackElement():取得初始化异步回送的元素对象。
           }
        我们通常在beginRequest事件中设置一个标头,或是启始化一个动化告知用户正在进行请求处理。

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3.  
  4. }
  5. protected void Button_Click(object sender, EventArgs e)
  6. {
  7. Thread.Sleep(2000);
  8. }

protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button_Click(object sender, EventArgs e)
{
Thread.Sleep(2000);
}

3、pageLoading:
        触发时机:异步回送已经被服务器接收并响应,但还没有对页面进行任何更新之前引发
        添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(loadingFunc);
        移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_pageLoading(loadingFunc);
             loadingFunc是页面更新之前要执行的客户端方法。该方法的声明为:
             function loadingFunc(sender,args)
             {
                //args的数据类型是:PageLoadingEventArgs类型。
                //args代表内容将要被更新或删除的UpdatePanel控件的<div>。
                //var arr = args.get_panelsDeleting(); 取得将被删除的各个UpdatePanel控件的<div>
                //var arr = args.get_panelsUpdating();取得将被更新的各个UpdatePanel控件的<div>
             }

5、endRequest:
       触发时机:回送请求处理完毕后,就会引发endRequest事件。
       添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endFunc);
       移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(endFunc);
           endFunc是页面请求完成后执行的客户端方法。该方法的声明为:
           function endRequest(sender,args)
           {
                //args的数据类型是:EndRequestEventArgs类型
                //var err = args.get_error():判断是否发生错误,并取得错误对象。
                //var em = args.get_error().message:取得错误的出错信息。
                //args.set_errorHandled(true):设置错误已被处理。
                //var gm = args.get_errorHandled():判断错误是否被处理。
                //异步请求发生异常后,如果程序员不在客户端捕获处理的话,PageRequestManager对象会将其以对话框的形式弹出异常的信息。如果程序员想自己编写错误处理代码,而不交由PageRequestManager对象处理的话。那程序员可以通过args.get_error().message属性取得错误信息,然后编写异常处理代码,最后记得执行args.set_errorHandled(true)。这样就阻止异常继续回返给PageRequestManager对象。具体使用在后面将详细说明。
           }

  1. <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  2. <ContentTemplate>
  3. <%=DateTime.Now %><br />
  4. <asp:Button ID="btnError" runat="server" Text="Error" OnClick="btnError_Click" />
  5. <asp:Button ID="btnTimeout" runat="server" Text="Timeout" OnClick="btnTimeout_Click" />
  6. <input id="button" type="button" value="Abort" onclick="Sys.WebForms.PageRequestManager.getInstance().abortPostBack();" />
  7. <asp:Button ID="btnDataItem" runat="server" Text="Reister DataItem" OnClick="btnDataItem_Click" />
  8. </ContentTemplate>
  9. </asp:UpdatePanel>
  10.  
  11. <mce:script type="text/javascript"><!--
  12. Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
  13. function(sender,e){
  14. if(e.get_error())
  15. {
  16. e.set_errorHandled(true);
  17.  
  18. if(e.get_response().get_timedOut())
  19. {
  20. showMessage("您的请求已超时。")
  21. }else if(e.get_response().get_statusCode() != 200)
  22. {
  23. showMessage("遇到未知错误。");
  24. }else
  25. {
  26. showMessage(e.get_error().message);
  27. }
  28. }else if(e.get_response().get_aborted())
  29. {
  30. showMessage('您的请求已取消')
  31. }
  32. else
  33. {
  34. var upId = "<%= this.UpdatePanel1.ClientID %>";
  35. var item =e.get_dataItems()[upId];
  36. showMessage("您注册了:"+item);
  37. }
  38. });
  39.  
  40. // --></mce:script>

4、pageLoaded:
        触发时机:回送完成页面区域被更新之后引发。
        添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(loadedFunc);
        移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_pageLoaded(loadedFunc);
           loadedFunc是页面更新后要执行的客户端方法。该方法的声明为:
           function loadedFunc(sender,args)
           {
                //args的数据类型是:PageLoadedEventArgs类型
                //args代表更新的或创建的UpdatePanel控件的<div>
                //var arr = args.get_panelsUpdated();取得被更新的各个UpdatePanel控件的<div>
                //var arr = args.get_panelsCreated();取得新创建的各个UpdatePanel控件的<div>
           }

转自:http://blog.csdn.net/xd43100678/article/details/5953579

AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序 《转》的更多相关文章

  1. Apex 中插入更新数据的事件执行顺序

    在使用 Apex 代码插入或更新数据的时候,若干事件会被按顺序执行.了解这些顺序可以提高调试程序的效率,也可以避免不必要的错误. 可以参考官方文档. 事件的执行顺序 从数据库中读取要更新的数据记录或初 ...

  2. Unity3D中关于场景销毁时事件调用顺序的一点记录

    先说一下我遇到的问题,我弄了一个对象池管理多个对象,对象池绑定在一个GameObject上,每个对象在OnBecameInvisible时会进行回收(即移出屏幕就回收),但是当场景切换或停止运行程序时 ...

  3. 异常处理:Sys.WebForms.PageRequestManagerParserErrorException:The message……

    如果你为了使页面可以达到局部刷新的效果,并且用了UpdatePanel控件,这是如果你在后台页面用到Response对象时肯呢过会抛出一下异常: 解决方法:$(document).ready(func ...

  4. Ajax方法执行跳转或者加载操作系统报出这样错误Sys.WebForms.PageRequestManagerParserErrorException:如何让解决

    当你在代码中使用Response.Redirect();  或者Response.Write();难免会遇到Sys.WebForms.PageRequestManagerParserErrorExce ...

  5. ajax请求中的6个全局事件

    //事件触发顺序ajaxStart,ajaxSend,ajaxSuccess或ajaxError,ajaxComplete,ajaxStop $(document).ajaxStart(functio ...

  6. jquery ajax 中各个事件执行顺序

    jquery ajax 中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事 ...

  7. jquery ajax中各个事件执行顺序如下

    $(function(){ setTimeout(function(){ $.ajax({ url:'/php/selectStudent.php', }); },0); $(document).aj ...

  8. jquery ajax中事件的执行顺序

    jquery中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事件) 6.e ...

  9. Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException无法分析从服务器收到的消息。之所以出现此错误,

    Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException: 无法分析从服务器收到的消息.之所以出现此错误 ...

随机推荐

  1. PHP操作Oracle数据库

    原文出处 (这是来自“百度文库”中的文章写得很不错) PHP操作Oracle数据库(OCI数据抽象层)OCI(Oracle 8 Call-Interface)是PHP中内置的数据库抽象层函数.下面针对 ...

  2. 偶遇问题 - - JavaScript 取消链接默认行为问题

    今天在测试<JavaScript DOM编程艺术(第2版)>中第69页代码时,遇到了问题.本来预期效果应该是点击链接后不跳转当前页面,而是另外弹出有个窗口.但结果却是页面跳转了.代码如下图 ...

  3. java异常类的使用

    1.异常的概念 什么是异常?程序出错分为两部分,编译时出粗和运行时出错.编译时出错是编译器在编译源码时发生的错误: 运行时出错是在编译通过,在运行时出现的错误.这种情况叫异常. 例如:数组越界,除数为 ...

  4. 表单提交对chrome记住密码的影响

    在处理注册.登录等含有用户名,密码的元素的表单时,chrome会主动的提示记住密码,然而这个功能在用户名的选择上真是耐人寻味,它总是寻找离password input控件最近的那一个文本框的内容,作为 ...

  5. VMware复制Centos6虚拟机要改的地方

    1.删除文件 /etc/udev/rules.d/70-persistent-net.rules  (它会绑定你网卡信息) 2.重新配置 # vi /etc/sysconfig/network-scr ...

  6. 【转】 UINavigationItem UINavigationBar 关系分析

    原文:http://blog.csdn.net/luoyeffcs/article/details/16106707 目录 1.关系分析 2.关系综述 3.概念点 4.疑问 1.关系分析 UIBarI ...

  7. java_设计模式_策略模式_Strategy pattern(2016-07-15)

    感受:将算法从方法级别,提升到类级别.之后利用java多态,来切换不同的算法实现不同的功能. 在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属 ...

  8. IOS DLNA开发(CyberLink和PlatinumKit)

    1.CyberLink 和 PlatinumKit 两者的比较 CyberLink大概在2010年之后功能就没有更新,部分功能不够完善,网上有下载地址 http://www.pudn.com/down ...

  9. SGU 181.X-Sequence

    时间限制:0.5s 空间限制:4M 题意: 令X0=A, Xi=(a*Xi-1^2,b*Xi-1+c)%m; 求Xk,(0<=k<=109),(0<=a,b<=100),(1& ...

  10. css清除浮动方法大全

    清除浮动这个问题,做前端的应该再熟悉不过了,也是每一个web前台设计师 必须掌握的机能. 为什么浮动这么难? 因为浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width ...