Ajax的核心是XMLHttpRequest对象(XHR)。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。即异步的 JavaScript 和 XML

1.将前端资源页面pages文件夹下的静态资源:bootstrap3、css、images、js、web、 index.html相关的资源复制到项目src/main/resources/static文件夹下。如图所示。

注意区分thymleaf模板引擎,它的静态界面存放在templates文件夹下

2.以登录为例,业务层方法

    @Override
    public User login(String username, String password) {
        // 调用userMapper的findByUsername()方法,根据参数username查询用户数据
        User result = userMapper.findByUsername(username);
        // 判断查询结果是否为null
        if (result == null) {
            // 是:抛出UserNotFoundException异常
            throw new UserNotFoundException("用户数据不存在的错误");
        }
        // 判断查询结果中的isDelete是否为1
        if (result.getIsDelete() == 1) {
            // 是:抛出UserNotFoundException异常
            throw new UserNotFoundException("用户数据不存在的错误");
        }
        // 从查询结果中获取盐值
        String salt = result.getSalt();
        // 调用getMd5Password()方法,将参数password和salt结合起来进行加密
        String md5Password = getMd5Password(password, salt);
        // 判断查询结果中的密码,与以上加密得到的密码是否不一致
        if (!result.getPassword().equals(md5Password)) {
            // 是:抛出PasswordNotMatchException异常
            throw new PasswordNotMatchException("密码验证失败的错误");
        }
        // 创建新的User对象
        User user = new User();
        // 将查询结果中的uid、username、avatar封装到新的user对象中
        user.setUid(result.getUid());
        user.setUsername(result.getUsername());
        user.setAvatar(result.getAvatar());
        // 返回新的user对象
        return user;
    }

3.控制层方法

    @RequestMapping("login")
    public JsonResult<User> login(String username, String password, HttpSession session) {
        // 调用业务对象的方法执行登录,并获取返回值
        User data = userService.login(username, password);
        //登录成功后,将uid和username存入到HttpSession中
        session.setAttribute("uid", data.getUid());
        session.setAttribute("username", data.getUsername());
        // 将以上返回值和状态码OK封装到响应结果中并返回
        return new JsonResult<User>(OK, data);
    }

4.前端编写Ajax

<script type="text/javascript">
			$("#btn-login").click(function() {
				$.ajax({
					url: "/users/login",
					type: "POST",
					data: $("#form-login").serialize(),
					dataType: "json",
					success: function(json) {
						if (json.state == 200) {
							alert("登录成功!");
							$.cookie("avatar", json.data.avatar, {expires: 7});
							console.log("cookie中的avatar=" + $.cookie("avatar"));
							location.href = "index.html";
						} else {
							alert("登录失败!" + json.message);
						}
					}
				});
			});
		</script>

$是一个jQuery函数,它可以通过ID选择器选择组件,ajax函数具体使用见下图

 jQuery Ajax本质就是 XMLHttpRequest,对他进行了封装,方便调用!

 图片来源于狂神说,对于data的传参方式

第一种,以json对象形式传参

data: {name:"John",location:"Boston"}。

第二种,以json数组形式传入

[
 {"name":"uname","value":"alice"},
 {"name":"mobileIpt","value":"110"},  
 {"name":"birthday","value":"2012-11-11"}
]

第三种,通过序列化从从表单中获取数据

表单

<form id="form-login" action="index.html" class="form-horizontal" role="form">
					<!--用户名-->
					<div class="form-group">
						<label for="username" class="col-md-3 control-label">名字:</label>
						<div class="col-md-8">
							<input name="username" type="text" class="form-control" id="username" placeholder="请输入用户名">
						</div>
					</div>
					<!--密码-->
					<div class="form-group">
						<label for="password" class="col-md-3 control-label"> 密码:</label>
						<div class="col-md-8">
							<input name="password" type="text" class="form-control" id="password" placeholder="请输入密码">
						</div>
					</div>
					<!-- 记住我-->
					<div class="form-group">
						<div class="col-md-offset-3 col-md-6">
							<div class="checkbox">
								<label>
									<input type="checkbox" id="auto">自动登录
								</label>
							</div>
						</div>
					</div>
					<!--提交按钮-->
					<div class="form-group">
						<label class="col-md-3 control-label"></label>
						<div class="col-md-8">
							<input id="btn-login" class="btn btn-primary" type="button" value="登录" />
							<span class="pull-right"><small>还没有账号?</small><a href="register.html">注册</a></span>
						</div>
					</div>
				</form>

Logo

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

更多推荐