AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序 《转》
AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序
测试代码:
测试代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="AjaxCtpWebDemo.Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<%=DateTime.Now.ToString() %><hr/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<%=DateTime.Now.ToString() %>
<hr/>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
<mce:script type="text/javascript" language="javascript"><!--
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
function(sender, e)
{
alert("add_initializeRequest");
}
); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
function(sender,e){
alert("add_endRequest");
}
); Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(
function(sender,e){
alert("add_beginRequest");
}
); Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(
function(sender,e){
alert("add_pageLoaded");
}
); Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(
function(sender,e){
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事件来取消一个异步回送(正在进行的回送和将要初始化的回送)。
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);
}
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事件中设置一个标头,或是启始化一个动化告知用户正在进行请求处理。
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button_Click(object sender, EventArgs e)
{
Thread.Sleep(2000);
}
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对象。具体使用在后面将详细说明。
}
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<%=DateTime.Now %><br />
<asp:Button ID="btnError" runat="server" Text="Error" OnClick="btnError_Click" />
<asp:Button ID="btnTimeout" runat="server" Text="Timeout" OnClick="btnTimeout_Click" />
<input id="button" type="button" value="Abort" onclick="Sys.WebForms.PageRequestManager.getInstance().abortPostBack();" />
<asp:Button ID="btnDataItem" runat="server" Text="Reister DataItem" OnClick="btnDataItem_Click" />
</ContentTemplate>
</asp:UpdatePanel> <mce:script type="text/javascript"><!--
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
function(sender,e){
if(e.get_error())
{
e.set_errorHandled(true); if(e.get_response().get_timedOut())
{
showMessage("您的请求已超时。")
}else if(e.get_response().get_statusCode() != 200)
{
showMessage("遇到未知错误。");
}else
{
showMessage(e.get_error().message);
}
}else if(e.get_response().get_aborted())
{
showMessage('您的请求已取消')
}
else
{
var upId = "<%= this.UpdatePanel1.ClientID %>";
var item =e.get_dataItems()[upId];
showMessage("您注册了:"+item);
}
}); // --></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的事件激发顺序 《转》的更多相关文章
- Apex 中插入更新数据的事件执行顺序
在使用 Apex 代码插入或更新数据的时候,若干事件会被按顺序执行.了解这些顺序可以提高调试程序的效率,也可以避免不必要的错误. 可以参考官方文档. 事件的执行顺序 从数据库中读取要更新的数据记录或初 ...
- Unity3D中关于场景销毁时事件调用顺序的一点记录
先说一下我遇到的问题,我弄了一个对象池管理多个对象,对象池绑定在一个GameObject上,每个对象在OnBecameInvisible时会进行回收(即移出屏幕就回收),但是当场景切换或停止运行程序时 ...
- 异常处理:Sys.WebForms.PageRequestManagerParserErrorException:The message……
如果你为了使页面可以达到局部刷新的效果,并且用了UpdatePanel控件,这是如果你在后台页面用到Response对象时肯呢过会抛出一下异常: 解决方法:$(document).ready(func ...
- Ajax方法执行跳转或者加载操作系统报出这样错误Sys.WebForms.PageRequestManagerParserErrorException:如何让解决
当你在代码中使用Response.Redirect(); 或者Response.Write();难免会遇到Sys.WebForms.PageRequestManagerParserErrorExce ...
- ajax请求中的6个全局事件
//事件触发顺序ajaxStart,ajaxSend,ajaxSuccess或ajaxError,ajaxComplete,ajaxStop $(document).ajaxStart(functio ...
- jquery ajax 中各个事件执行顺序
jquery ajax 中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事 ...
- jquery ajax中各个事件执行顺序如下
$(function(){ setTimeout(function(){ $.ajax({ url:'/php/selectStudent.php', }); },0); $(document).aj ...
- jquery ajax中事件的执行顺序
jquery中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事件) 6.e ...
- Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException无法分析从服务器收到的消息。之所以出现此错误,
Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException: 无法分析从服务器收到的消息.之所以出现此错误 ...
随机推荐
- 关于struts2中action请求会执行两次的问题
关于struts2中action请求会执行两次的问题 在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...
- URAL 2032 - Conspiracy Theory and Rebranding【本源勾股数组】
[题意] 给出三角形的三个边长,均是10^7以内的整数,问三角形的三个角的坐标是否能均是整数,输出其中任意一个解. [题解] 一开始想的是枚举一条边的横坐标,然后通过勾股定理以及算角度求出其他点的坐标 ...
- [O] SQLite数据库报错:no such column
在SQLite数据库创建语句增加列,运行后报错:no such column 在语法规范的前提下,即 //SQLite数据库创建,逗号与空格须严格 String CREATE_NOTE = " ...
- 提供他人class文件
1.考虑的问题,提供的文件是否依赖于其他jar包. 例如:解析html简历时,依赖于Jsoup包.
- 八、C# 值类型
结构.枚举.装箱.拆箱 自定义值类型 如何利用结构来定义新的值类型,并使之具有与大多数预定义 类型相似的行为,这里的关键在于,任何 新定义的值类型都有它们自己的数据和方法. 一般用枚举来定义常量值集合 ...
- spring与axis2整合发布webservice
最近在研究整合spring框架和axis2发布webservice服务,由于本人也才学java不久,为了便于以后的查看,在这里记录下发布过程. 所需的工具包,spring.jar和axis2链接地址为 ...
- JSP中用include标签动态引入其它文件报错
<jsp:include page="<%=path %>/include.jsp"></jsp:include> 报错:attribute f ...
- angularJS中如何写自定义指令
指令定义 对于指令,可以把它简单的理解成在特定DOM元素上运行的函数,指令可以扩展这个元素的功能 例如,ng-click可以让一个元素能够监听click事件,并在接收到事件的时候执行angularJS ...
- php中函数前加&符号的作用分解
这篇文章主要介绍了php中的函数前加&符号的作用分解,其作用叫做引用返回,有点抽象,详细解释请看本文内容,需要的朋友可以参考下 (转载) php变量前面加&符号是什么意思就不用多说了 ...
- Cobar介绍及配置
from:http://code.alibabatech.com/wiki/display/cobar/Home Skip to end of metadata Page restrictions ...