使用Ajax完成注册和登录

简介

完成用户的登录和注册,以及个人信息的查询,并使用Ajax向后端提交JSON格式的数据。AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。而JSON是一种轻量级的数据交换格式, 易于人阅读和编写,同时也易于机器解析和生成。

实现

控制器

@Autowired注解负责完成服务层成员变量的自动装配。
@RequestBody注解负责将前端发送过来的JSON数据封装到用户对象之中,以方便后端获取数据。
@ResponseBody注解负责给前端返回JSON数据对象。

package com.qj.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.qj.model.User;
import com.qj.model.UserInfo;
import com.qj.service.UserInfoService;
import com.qj.service.UserService;

@Controller
@RequestMapping("/user1")
public class UserController1 {

	@Autowired
	private UserService userService;
	@Autowired
	private UserInfoService userInfoService;

	@ResponseBody
	@RequestMapping("/login")
	public User login(@RequestBody User user) {
		String name = user.getUserName();
		String password = user.getUserPassword();
		User user1 = userService.selectByName(name);
		// 判断用户是否存在
		if (user1 != null) {
			// 判断密码是否相等
			if (password.equals(user1.getUserPassword())) {
				return user1;
			}
		}
		return null;
	}

	@ResponseBody
	@RequestMapping("/register")
	public User register(@RequestBody User user) {
		User user1 = userService.selectByName(user.getUserName());
		// 判断用户是否已经注册
		if (user1 == null) {
			int i = userService.insert(user);
			// 判断用户是否注册成功
			if (i > 0) {
				UserInfo userInfo = user.getUserInfo();
				int id = user.getUserId();
				userInfo.setUserId(id);
				// 添加用户信息
				int i1 = userInfoService.insert(userInfo);
				if (i1 > 0) {
					return user;
				}
			}
		} else {
			// 如果用户已经注册,直接返回数据
			return user1;
		}
		return null;
	}

	@ResponseBody
	@RequestMapping("/show")
	public User show(String userName) {
		// 查询用户
		User user = userService.selectByName(userName);
		System.out.println(user);
		if (user != null) {
			return user;
		}
		return null;
	}
}

登录

得到输入框内的登录信息,并将其转换为JSON字符串,并使用Ajax提交用户登录信息,最终得到后端响应给前端的验证结果。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js" ></script>
<script>
	function login() {
		// 获取用户名和密码
		var name = $("#name").val();
		var password = $("#password").val();
		$.ajax({
			url : "user1/login",
			type : "post",
			// data表示发送的数据
			data : JSON.stringify({
				userName : name,
				userPassword : password
			}),
			// 定义发送请求的数据格式为JSON字符串
			contentType : "application/json;charset=UTF-8",
			//定义回调响应的数据格式为JSON字符串,该属性可以省略
			dataType : "json",
			//成功响应的结果
			success : function(data) {
				if (data != null) {
					location.href = "show.html";
				}
			}
		});
	}
</script>
</head>
<body>
	<form>
		姓名:<input type="text" id="name" /> <br>
		密码:<input type="password" id="password" /><br> 
		<input type="button" value="确定" onclick="login()" />&nbsp;&nbsp;&nbsp; 
		<input type="reset" value="取消" />
	</form>
</body>
</html>
注册

注册与登录类似。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
	function register(){
		var name = $("#name").val();
		var password = $("#password").val();
		var phone = $("#phone").val();
		var address = $("#address").val();
		$.ajax({
			type : "post",
			url : "user1/register",
			data : JSON.stringify({userName : name, userPassword : password, userInfo : {userPhone : phone, userAddress: address }}),
			contentType : "application/json;charset=utf-8",
			dataType : "json",
			success : function(data){
				if (data != null){
					alert("注册成功!");
					location.href="login.html";
				}
			}
		});
	}
</script>
</head>
<body>
	<form>
		姓名:<input type="text" id="name" /> <br> 
		密码:<input type="password" id="password" /> <br> 
		电话:<input type="text" id="phone" /> <br> 
		地址:<input type="text" id="address" /> <br>
		<input type="button" value="确定" onclick="register()"/>&nbsp;&nbsp;&nbsp; 
		<input type="reset" value="取消" />
	</form>
</body>
</html>
信息查询显示

通过查询用户名,将得到的用户信息以JSON字符串的形式显示在页面中。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户页面</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js" ></script>
<script>
	function show(){
		var userName= $("#userName").val();
		$.ajax({
			type : "get",
			url : "user1/show?userName="+userName,
			dataType : "json",
			success : function(data){
				if (data != null){
					//将用户信息显示在页面中
					var newData = JSON.stringify(data,null,4);
					var show = document.getElementById('show');
					show.innerHTML=newData;
				}
			}
		});
	}
</script>
</head>
<body>
	<form>
		<input type="text" id="userName" />
		<input value="查询" type="button" onclick="show()"/>
	</form>
	<pre><code id="show">显示用户信息</code></pre>
</body>
</html>

总结

相比于表单提交数据,Ajax对于用户的使用体验有良好的把控。比如,在登录场景中,使用Ajax可以实时的对用户的登录信息进行验证,当用户密码错误,只需更正密码即可;而使用表单提交数据,因为页面的跳转和数据的验证都是在后端进行。当用户信息错误,页面相当于进行了刷新,原本已经填写好的其他正确信息都已清空,只得重新填写,浪费时间,没有良好的用户体验。

使用Ajax实现登录注册功能通常是在前端网页与服务器之间进行异步数据交换,用户无需刷新整个页面即可完成操作。以下是Ajax登录注册过程中的一般步骤: 1. **HTML 表单**: 创建HTML表单,包含用户名、密码等字段,并设置相应的输入事件(如`onsubmit`)。 ```html <form id="loginForm" onsubmit="event.preventDefault(); loginWithAjax()"> <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <button type="submit">登录</button> </form> <form id="registerForm" onsubmit="event.preventDefault(); registerWithAjax()"> <!-- ...其他注册表单字段... --> <button type="submit">注册</button> </form> ``` 2. **JavaScript (Ajax)**: 使用JavaScript库(如jQuery, Axios, 或原生的Fetch API)来发送异步请求。 ```javascript function loginWithAjax() { const data = { username: $('#loginForm input[name=username]').val(), password: $('#loginForm input[name=password]').val() }; $.ajax({ url: '/api/login', type: 'POST', data: JSON.stringify(data), contentType: 'application/json', success: function(response) { // 登录成功后的处理 console.log(response); }, error: function(xhr, status, error) { // 错误处理 console.error(error); } }); } function registerWithAjax() { // 同样的,替换URL和数据 // ... } ``` 3. **服务器端处理**: 后端接收这些请求,验证用户输入,执行登录注册逻辑,然后返回响应(如JSON格式)。 4. **响应处理**: 前端根据服务器返回的状态(例如`success`或`error`)更新UI,显示消息或者重定向到适当页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值