Java Servlet - 在 ajax 中实现成功

Java Servlets - reaching SUCCESS in ajax

提问人:egor-n 提问时间:8/7/2023 更新时间:8/8/2023 访问量:31

问:

我在使用 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 的某个地方看到了这一点)。我怎样才能到达它?

谢谢你的帮助。

Java AJAX

评论


答:

1赞 Diego Borba 8/7/2023 #1

你可以试试这个:

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 调用成功并且服务器发送响应时,函数中的参数将保存该响应的内容。看看这个successdatadatasuccess

使用此设置,当 servlet 作为响应发送时,将触发 AJAX 调用的成功函数,并且页面将重定向到 .如果 servlet 发送除 之外的任何内容,则可以在函数中相应地处理它。"SUCCESS""/adminUser?action=spisok""SUCCESS"success

评论

0赞 egor-n 8/7/2023
谢谢,但它不起作用。它仍然会转到那个“ERROR”子句,并且不会像我想要的那样重定向。它认为“SUCCESS”是一条错误消息。
0赞 Diego Borba 8/7/2023
我在答案中添加了配置,也许这就是问题所在。ContentType
0赞 egor-n 8/7/2023
不,仍然只是在 div 中打印“SUCCESS”以表示错误:)我可能可以通过检查发送到错误的确切内容来管理它。但这没有意义。如果存在,应该有某种方法可以达到成功条款)
1赞 egor-n 8/8/2023 #2

@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);
        }
 });