一、前因

        刚学完ajax没多久,想着写个注册界面,利用ajax把用户名和密码传过来,注册成功以后跳转到登录界面,之前一直用的是Servlet来重定向,结果直接就是说没有反应,调了半天就是不成功。

        查了半天,发现是ajax的问题,它的特点本来就是局部刷新,所以重定向没法用了,我又想到一个方法,既然后端传不了,那我走前端,前端里面不是有一个方法:location.href,我就喜滋滋的把路径一封装传前面去了。

        我真的会谢,又错了,又调了半天还是不行。上网去查,学到一个新的方法:top.location.href,诶,这个top就有意思了,它可以跳脱出框架,在顶层打开新窗口,看起来就很有戏,果然,成功了。

二、使用到的方法

        top.location.href = url;//url表示要跳转的路径        

三、代码实现

        1.后端部分

private void register(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        System.out.println("register");

        String name = req.getParameter("name");
        String password = req.getParameter("password");
        Map<String , Object> map = new HashMap<>();

        if(name != null && password != null && !userService.isHavaUser(name)) {
            System.out.println("注册成功");
            userService.register(name, password);
            map.put("url", req.getContextPath() + "/login.jsp");//将要跳转的路径封装传过去
            map.put("login", true);
        } else {
            map.put("msg", "用户名已存在,请换一个用户名");
            map.put("login", false);
        }

        resp.setContentType("text/html;charset=utf-8");
        ObjectMapper mapper = new ObjectMapper();
        mapper.writeValue(resp.getWriter(), map);
    }

        2.前端部分

$("#buttonId").bind('click', function () {
            var name = $("#nameId").val();
            var password = $("#passwordId").val();

            $.post(
                '<%=request.getContextPath()%>/user?method=register',
                {"name" : name, "password" : password},
                function (jsonObj) {
                    if(jsonObj.login) {
                        top.location.href = jsonObj.url;//进行页面跳转
                    } else {
                        alert(jsonObj.msg);
                    }
                },
                'json'
            );
        });

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐