【发布时间】:2019-11-25 12:20:33
【问题描述】:
我正在尝试通过 ajax 调用将用户名发送到 servlet 以检查其可用性,但 servlet 显示空指针异常。
我也尝试过使用 XMLHttpRequest 而不是 $.ajax。
这是我的 Javascript 文件:
$(document).ready(function() {
$("#reg-form").submit(function() {
var res = true;
if (!testUser()) {
res = false;
$("#erruser").css("display", "block");
$("#username").addClass("errclass");
} else {
$("#erruser").css("display", "none");
$("#username").removeClass("errclass");
}
return res;
});
});
function testUser() {
var el = $("#username").val();
var b = false;
$.ajax({
type: "POST",
url: "CheckUserServlet",
data: { user: el },
dataType: "json",
success: function(bool) {
alert(bool);
if (bool == "si") b = true;
},
error: function() {
alert("errore");
}
});
return b;
}
这是我的 servlet doPost 方法:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username=request.getAttribute("user").toString();
System.out.println("username servlet= "+username);
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
if (!ud.doRetrieveByUser(username)) {
response.getWriter().write("si");
return;
}
response.getWriter().write("no");
return;
}
谢谢!
【问题讨论】:
-
需要了解ajax是异步的。你不能做
if(!testUser())。在return之前,该请求不会完成。见How do I return the response from an asynchronous call? -
我也尝试添加 async:false 但没有
-
永远不要使用
async:false。这是一种可怕的做法,已被弃用 -
首先在浏览器开发工具中检查实际请求以查看实际发送的内容
-
您需要使用
request.getParameter("user");而不是request.getAttribute("user").toString();来获取user的值,而且您正在从服务器返回plain text但您已在 ajax 调用中将dataType: "json"更改为好吧。
标签: javascript jquery ajax servlets