提问人:egor-n 提问时间:8/7/2023 更新时间:8/8/2023 访问量:31
Java Servlet - 在 ajax 中实现成功
Java Servlets - reaching SUCCESS in ajax
问:
我在使用 ajax 的 jsp 和 servlet 之间的交互时遇到了问题。如果用户已经存在(它不应该保存用户),我希望 servlet 将错误发送到 jsp,并重定向到另一个页面(如果用户不存在并且 servlet 保存它)。
$.ajax({
type : "POST",
url:"/adminUser?save=save",
dataType:'json',
data: {save: 'save', login:login, pass1:pass1, userName:userName, email:email,
bukhUsersId: bukhUsersId, otdelId: otdelId, roleId: roleId, checkActive: checkActive},
success: function () {
top.location.href = "/adminUser?action=spisok";
} ,
error : function(xhr, status, error) {
$("#errorLogin").text("Пользователь с таким логином уже существует");
}
});
这是我的 servlet 的一个片段:
String login = request.getParameter("login");
if (adminSecurityDAOImpl.isUserExist(login)) {
response.sendError(400, "Пользователь с таким логином уже существует");
response.flushBuffer();
return;
}
else {
adminSecurityDAOImpl.saveUser(user);
//response.getWriter().write("SUCCESS");
response.flushBuffer();
`return
}
}
我不明白如何达到成功的部分。我尝试发回 200 个状态代码,什么也没返回,返回“成功”(这看起来很傻,但我在 stackoverflow 的某个地方看到了这一点)。我怎样才能到达它?
谢谢你的帮助。
答:
你可以试试这个:
String login = request.getParameter("login");
if (adminSecurityDAOImpl.isUserExist(login)) {
response.sendError(400, "Пользователь с таким логином уже существует");
response.flushBuffer();
return;
} else {
adminSecurityDAOImpl.saveUser(user);
response.setContentType("text/plain");
response.getWriter().write("SUCCESS"); // Sending a success response
response.flushBuffer();
return;
}
现在,在 jQuery AJAX 调用中,您可以修改 success 函数来处理响应:
$.ajax({
type: "POST",
url: "/adminUser?save=save",
dataType: 'json',
data: { save: 'save', login: login, pass1: pass1, userName: userName, email: email, bukhUsersId: bukhUsersId, otdelId: otdelId, roleId: roleId, checkActive: checkActive },
success: function (data) {
if (data === "SUCCESS") {
top.location.href = "/adminUser?action=spisok";
} else {
// Handle other unexpected success responses, if any
}
},
error: function (xhr, status, error) {
$("#errorLogin").text("Пользователь с таким логином уже существует");
}
});
在 jQuery AJAX 回调函数的上下文中,该变量表示服务器返回的响应数据。当 AJAX 调用成功并且服务器发送响应时,函数中的参数将保存该响应的内容。看看这个。success
data
data
success
使用此设置,当 servlet 作为响应发送时,将触发 AJAX 调用的成功函数,并且页面将重定向到 .如果 servlet 发送除 之外的任何内容,则可以在函数中相应地处理它。"SUCCESS"
"/adminUser?action=spisok"
"SUCCESS"
success
评论
ContentType
@diego-borba 建议我将 servlet 中的“SUCCESS”发送回.jsp页面。
response.setContentType("text/plain");
response.getWriter().write("SUCCESS"); // Sending a success response
它对我不起作用(响应被视为错误,SUCCESS 被视为错误消息),但我尝试发送 json 对象,该对象会说 { success : true },并且它起作用了(因为 ajax 指定了 dataType:'json')。不知道为什么 200 状态代码被视为错误,但这一切都是这样工作的:
JsonObject myObj = new JsonObject();
myObj.addProperty("success", true);
response.getWriter().println(myObj.toString());
这是ajax代码:
$.ajax({
type : "POST",
url:"/adminUser?save=save",
dataType:'json',
data: {save: 'save', login:login, pass1:pass1, userName:userName, email:email,
bukhUsersId: bukhUsersId, otdelId: otdelId, roleId: roleId, checkActive: checkActive},
success: function (xhr, status, error) {
top.location.href = "/adminUser?action=spisok";
},
error : function(xhr, status, error) {
$("#errorLogin").text(xhr.responseText);
}
});
评论