1. <dt id="0f19c174"></dt>


        1. 狗万官网酒店 > 狗万官网下载 > Ajax呼吁时无法重定向的题目解决代码详解_javascript艺术

          Ajax呼吁时无法重定向的题目解决代码详解_javascript艺术

          来源: 2019-08-04 19:43 我来投稿 参与评论
          这篇文章主要介绍了Ajax呼吁时无法重定向的题目解决代码详解,顶使用Ajax呼吁时,如果后台进行重定向到任何页面时是心有余而力不足成功之,只能在新石器地址栏输入才能够实现重定向。下我们来看望解决办法吧

          前言

          当天发现,顶使用Ajax呼吁时,如果后台进行重定向到任何页面时是心有余而力不足成功之,只能在新石器地址栏输入才能够实现重定向。

          Ajax默认就是不支持重定向的,其它是一些刷新,不重新加载页面。

          要求实现的效果是,自此台网关拦截请求,瞧请求中是否存在token.如果不存在就跳转到登录页面。因为大多数请求都是采取Ajax.一开始发现无法进行重定向,每次都是返回到Ajax的结果处理函数。说到底的消灭办法如下,要求后台和前端进行拍卖。

          前台:

          /**
          *效益描述
          * @author lgj
          * @Description 重定向工具类
          * @date 2/27/19
          */
          @Slf4j
          public class RedirecUtil {
          /**
          *效益描述
          * @author lgj
          * @Description 重定向
          * @date 2/27/19
          * @param:
          * @return:
          *
          */
          public static void redirect(RequestContext ctx, String redirectUrl){
          try{
          //如果是Ajax呼吁
          if("XMLHttpRequest".equals(ctx.getRequest().getHeader("X-Requested-With"))){
          log.debug("ajax redirect");
          sendRedirect(ctx.getResponse(),redirectUrl);
          }
          //如果是浏览器地址栏请求
          else {
          log.debug("normal redirect ");
          ctx.getResponse().sendRedirect(redirectUrl);
          }
          }
          catch(Exception ex){
          ex.printStackTrace();
          }
          }
          /**
          *效益描述 
          * @author lgj
          * @Description Ajax呼吁时重定向处理
          * @date 2/27/19
          * @param: 
          * @return: 
          *
          */
          private static void sendRedirect(HttpServletResponse response, String redirectUrl){
          try {
                 //此地并不是设置跳转页面,而是将重量定向的地方发给前端,让前端执行重定向
          //安装跳转地址
          response.setHeader("redirectUrl", redirectUrl);
          //安装跳转使能
          response.setHeader("enableRedirect","true");
          response.flushBuffer();
          } catch (IOException ex) {
          log.error("Could not redirect to: " + redirectUrl, ex);
          }
          }
          }

          前者处理

          主要种办法:利用Ajax的complete艺术

          $.ajax({
          type: "post",
          url: "/auth/token/check",
          success: function(data,status){
          console.log("/token/check 回到 status : "+status)
          },
          //呼吁完成调用
          (XHR, TS){
          console.log("complete");
          var url = XHR.getResponseHeader("redirectUrl");
          console.log("redirectUrl = " + url);
          var enable = XHR.getResponseHeader("enaleRedirect");
          console.log("enableRedirect = " + enable);
          if((enable == "true") && (url != "")){ 
          var win = window; 
                   while(win != win.top){
                win = win.top;
                  }
                   win.location.href = url; 
                    } 
                }, 
              });
          })

          但是上面有个问题就是,每个ajax都要求编写 comlete 艺术,代码复用率低。

          老二种方式 : 利用全局的complete艺术

          ajax呼吁

          $("#NON-TOKEN").click(function () {
          $.ajax({
          type: "post",
          url: "/auth/token/check",
          success: function(data,status){
          console.log("/token/check 回到 status : "+status)
          },
          });

          全局处理

          瞩目这参数(event, xhr, settings)决不能丢掉,否则会报错。

          //每一个Ajax 呼吁完成后都会执行。
          $(document).ajaxComplete(function (event, xhr, settings) {
          console.log("ajaxComplete ")
          redirectHandle(xhr);
          })
          function redirectHandle(xhr) {
            //获取后台返回的平均数
          var url = xhr.getResponseHeader("redirectUrl");
          console.log("redirectUrl = " + url);
          var enable = xhr.getResponseHeader("enableRedirect");
          if((enable == "true") && (url != "")){
          var win = window;
          while(win != win.top){
          win = win.top;
          }
          win.location.href = url;
          }
          }

          也得以将上述前端代码放入一个js文件中,在需求开展重定向的时光引入即可,便足以实现更高的编码复用率。

          redirect.js

          function redirectHandle(xhr) {
          var url = xhr.getResponseHeader("redirectUrl");
          console.log("redirectUrl = " + url);
          var enable = xhr.getResponseHeader("enableRedirect");
          if((enable == "true") && (url != "")){
          var win = window;
          while(win != win.top){
          win = win.top;
          }
          win.location.href = url;
          }
          }
          $(function () {
          $(document).ajaxComplete(function (event, xhr, settings) {
          console.log("ajaxComplete adffdafadsaf")
          redirectHandle(xhr);
          })
          })

          引入js文件,src根据据实际情形设置。

          <script src="/common/redirect.js"></script>

          上述就是本文的方方面面内容,瞩望对大家的上学有所帮助,也愿意大家多多支持脚本的师。

          义务编辑:狗万官网酒店
           
           
          0% (0)
           
           
          0% (0)
          机长评论( ) 请自觉遵守互联网相关的富民政策法规,不准发布色情、暴力、反动的议论。
          地名: 匿名?