1 <script type="text/javascript" language="javascript"> 2 3 Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function (sender, args) 4 { 5 window.ClearAllInpuTextField(); 6 if (sender._activeElement.id == "btnPrint") 7 { 8 window.showOnloading("获取快递单号,打印处理中......"); 9 } 10 }); 11 12 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 13 14 function EndRequestHandler(sender, args) 15 { 16 var prm = Sys.WebForms.PageRequestManager.getInstance(); 17 if (sender._request == null) 18 { 19 window.removeload(); 20 } 21 if (args.get_error() != undefined) 22 { 23 var errorMessage; 24 if (args.get_response().get_statusCode() == '200') 25 { 26 errorMessage = args.get_error().message; 27 } 28 else 29 { 30 // Error occurred somewhere other than the server page. 31 errorMessage = 'An unspecified error occurred. '; 32 } 33 args.set_errorHandled(true); 34 alert(errorMessage); 35 } 36 } 37 </script>
在更新面板中正常的按钮事件中, 点击开发触发网络请求.beginRequest被触发, 当服务器端返回响应数据时,endRequest被触发. 这是正常的流程.
还有另一种情况发生, 在EndRequest函数中脚本触发了另一次网络请求,这时 beginRequest 被触发, 网络请求开始的同时,endRequest随后也会被触发,但是网络是Pending状态.
也就是说sender._request 请求对象不为空,在请求中,之后服务器返回数据,endRequest又被真正触发,这时 request为null, 也就是
Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()为false.