zoukankan      html  css  js  c++  java
  • Ajax 与 Sys.WebForms.PageRequestManagerParserErrorException异常

      最近做项目遇到一个奇怪的问题:如果浏览器session丢失后,点击一个按钮,触发一个Ajax方法,浏览器会弹出一个对话框。异常信息如下: 

      后来经过查找,原来我的页面继承了一个BasePage.cs文件,BasePage.cs文件里判断session是否存在,如果不存在直接跳转到登录页(这里使用的跳转是Response.Redirect())。正是因为有这跳转代码的存在所有才导致了报错。Ajax方法是无法执行页面跳转的操作的。这里如果需要让Ajax方法执行跳转页面的操作,需要在web.Config文件里配置一下。添加以下代码即可:

    <system.web>  

      <httpModules>   

        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0,                   Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

        </httpModules>

     </system.web>  

     

      

      有的时候可能你会说,我的配置文件里面已经加上了这个配置信息,为什么页面还是会报错呢?   

      这种方式只支持你在cs文件里面执行Response.Redirect()的跳转,不支持Server.Transfer()Server.Execute()的转发,以及Response.Write("<script></script>")在页面输出脚本跳转。

      但是你可以使用Response.Redirect()跳转到指定页,在那个指定页里面写js脚本。

     

     

      当然了,如果你偏不要在配置文件里加上这段代码,你也可以象网上说的那样在页面文件加上如下Js脚本对异常信息进行友好的处理。

      <script language="javascript" type="text/javascript">

        //当使用ajax的页面,session丢失时,弹出提示并转向

        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);     function EndRequestHandler(sender, args)  

         

            if (args.get_error() != undefined){ 

                if(args.get_error().message.substring(0, 51) == "Sys.WebForms.PageRequestManagerParserErrorException")  

                    window.location.reload(); //出现Session丢失时的错误处理,可以自己定义。 

                else

                    alert( "登录超时,请重试! "); //其他错误的处理。

                args.set_errorHandled(true);

            }

       

        </script>

     

  • 相关阅读:
    集合-ArrayList 源码解析
    >>《配色设计原理.pdf》
    >>《[美国视觉设计学院用书:完成设计(从理论到实践)].(萨马拉).温迪等.扫描版.pdf》
    《Photoshop智能手机APP界面设计.pdf》
    《贴心设计:打造高可用性的移动产品》——5.平板电脑和电子书阅读器
    3H Buy a Ticket —— Dij
    最短路板子
    3E A Simple Problem —— 数论
    3D 城池攻占 —— 左偏树
    3A Least Cost Bracket Sequence —— 贪心
  • 原文地址:https://www.cnblogs.com/xujie/p/1770006.html
Copyright © 2011-2022 走看看