• 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>

     

  • 相关阅读:
    tp3.2自动验证
    tp3.2 前端截取字符串
    tp3.2前端页面格式化时间
    tp3.2 php sdk上传七牛云
    汇编语言:编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b段中
    编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中
    实现一次用内存0:0-0:15单元中的内容改写程序中的数据,完成程序:
    编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令包括 mov ax,4c00h 和 int 21h
    vue 常用操作
    js try catch 获取错误信息
  • 原文地址:https://www.cnblogs.com/xujie/p/1770006.html
Copyright © 2020-2023  润新知