解决Servlet接收不了前台$ajax传参问题

需求是想做一个注册页面。当用户输入用户名或者邮箱时,能够异步的请求数据,来验证此用户名或者邮箱是否已经被注册,即注册验证。

前端采用jquey的$ajax方法进行参数的传递,这里以输入用户名为例进行记录,代码如下。

// 验证用户名是否被使用
$("#name").blur(function() {
	var name = $("#name").val();
	//发送异步请求
	$.ajax({
		url : "checkUserameServlet",
		type : "post",
		contentType : "application/json; charset=utf-8",
		data : "name=" + name,
		success : function(data) { // 会将服务器返回的数据保存到data中
			if (data == 0) {
				$("#name_regist_span").html("用户名可以使用");
				usernameFlag = true;
			} else {
				$("#name_regist_span").html("用户名不可以使用");
			}
		}
	});
});

首先,在输入ls来验证时,信息提示该用户名可以使用,但是此用户名在数据库中已经存在了,这与预期不符。

检查浏览器所接收的请求数据时发现,接受的请求正文是Request payload,看似是接收到了前台的数据。

然而在后台,Servlet想要接收ajax传来的参数,并且通过这个参数访问数据库,但是通过调试发现,这里的username获取到的值却是null,所以从后台找不到数据,所以前台就得不到正确的响应,代码如下。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// 设置编码
	request.setCharacterEncoding("utf-8");
	// 获取参数
	String username = request.getParameter("name");
	boolean flag = loginService.checkUsername(username);
	String msg = "";		
	// 如果没有查到,则能够使用
	if (!flag) {
		// 用户名可以使用
		msg = "0";
	} else {
		msg = "1";
	}
	response.setContentType("text/html;charset=utf-8");
	response.getWriter().println(msg);	}

这个问题最开始让我认为是Dao层的逻辑出现了问题,最终发现是ajax中请求头的设置出现问题,导致了Servlet接收不了参数。去掉请求头的设置,问题得以解决。

contentType : "application/json; charset=utf-8",
发布了74 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/fu_yunjian/article/details/102881391