zoukankan      html  css  js  c++  java
  • ajax跳转到新的jsp页面(局部刷新)

    ajax可以实现局部刷新页面,即在不刷新整个页面的情况下更新页面的局部信息。
    项目中遇到一个问题:在用户列表也,当点击某个按钮时需要去查询用户的信息,查询成功跳转到用户详情界面;查询失败,则在原页面弹出提示信息。
    想到两个解决办法:
    方法一:
    点击按钮,调用普通方法去查询用户信息,查询成功跳转到用户详情页面;查询失败,重定向调用查询用户列表的方法,在查询用户列表的方法结束后重新跳转到用户列表页面并弹出提示信息,相当于重新加载了用户列表页面。
    方法二:
    根据需求,不可以重新加载用户列表页面。用ajax调用查询用户详情的方法,查询成功返回用户Json串,查询失败则返回error。
         后台方法:
         
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @RequestMapping(value = "searchUser")
      public void searchHome(HttpServletResponse response){
            String result = null;
            ...
            查询用户的方法
            ...
     
            if(查询成功){
                 result = JsonUtil.objectToJson(查询结果对象);//结果对象转化成Json字符串,在ajax的结果中跳转到用户详情的处理方法
                 AjaxUtil.ajax(response,result);
            }else{//查询失败,返回提示信息
                 AjaxUtil.error(response, "查询用户失败");
            }   
      }
         jsp页面的ajax:
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function searchUser(){
              $.ajax({
                   url : "testurl/searchUser",
                   cache : false,
                   type : 'POST',
                   data : {
                        查询用的数据,比如用户ID
                   },
                   success : function(data) {
                        var obj = eval("("+data+")");  
                         
                        if(obj.success==undefined){//查询成功,跳转到详情页面
                             ...
                             跳转到用户详情处理方法,将date数据传过去
                             ...
                        }else if(!obj.success){//查询失败,弹出提示信息
                              weui.Loading.info(obj.message);
                        }
                   },
                   error : function(error) {
                        weui.alert("查询用户有误!");
                   }
              });       
        } 
    此处的重点在于如何在ajax的回调函数中调用普通方法,并将之前查询出的用户数据传到普通方法中(上面伪代码中红色的部分),继而跳转到用户详情页面。
    (1)错误案例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function searchUser(){
               $.ajax({
                    url : "testurl/searchUser",
                    cache : false,
                    type : 'POST',
                    data : {
                         查询用的数据,比如用户ID
                    },
                    success : function(data) {
                         var obj = eval("("+data+")");
                         if(obj.success==undefined){//查询成功,跳转到详情页面,encodeURIComponent编码是为了防止url后面传送的参数中文乱码,在后台处理时需要解码
                              window.location.href = "testurl/userForm?userJson="+encodeURIComponent(data);
                         }else if(!obj.success){//查询失败,弹出提示信息
                               weui.Loading.info(obj.message);
                         }
                    },
                    error : function(error) {
                         weui.alert("查询用户有误!");
                    }
               });       
         }

      

    错误原因:window.location.href方法为get方法,这会使得参数显示的浏览器的url中,不安全,并且数据传送的长度有限制。
     
    (2)想到的笨方法:在body中写隐藏的form表单,在回调函数中把查到的用户数据复制给form表单中的input,然后提交表单跳转到普通方法中,这样就是以post方法提交的数据,并且可以跳转到新页面了:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function searchUser(){
               $.ajax({
                    url : "testurl/searchUser",
                    cache : false,
                    type : 'POST',
                    data : {
                         查询用的数据,比如用户ID
                    },
                    success : function(data) {
                         var obj = eval("("+data+")");
                         if(obj.success==undefined){//查询成功,跳转到详情页面
                              $("#userFormJson").val(data);
                              $("#userForm").attr("action","testurl/userForm");
                              $("#userForm").submit();
                         }else if(!obj.success){//查询失败,弹出提示信息
                               weui.Loading.info(obj.message);
                         }
                    },
                    error : function(error) {
                         weui.alert("查询用户有误!");
                    }
               });       
         } 
    jsp页面的body
    1
    2
    3
    4
    5
    <body>
        <form id="userForm" action="" method="post">
            <input id="userFormJson" name="userFormJson" type="hidden"/>
        </form>
    </body>

      

  • 相关阅读:
    显示和隐藏密码
    如何给input的右上角加个清除的按钮?
    手机号中间四位用*号代替
    利用JS+正则表达式获取URL的GET数据
    腾讯QQ头像/QQ网名等相关获取API接口
    jqurey 在编辑的时候为select设置选中项
    html面试题
    js splice和delete删除数组长度会变化吗
    webp与jpg、png比较,它有什么优劣势?如何选择?
    iOS开发技术之应用代码注入防护
  • 原文地址:https://www.cnblogs.com/jpfss/p/9517727.html
Copyright © 2011-2022 走看看