【问题标题】:ajax - jsp always getting errorajax - jsp 总是出错
【发布时间】:2017-05-11 05:08:05
【问题描述】:

这是我对登录表单的 servlet 的 AJAX 调用,它正确执行 servlet,并且 servlet JsonObject 在每种情况下都正确保存信息(用户存在或不存在),但 AJAX 总是进入错误函数而不是成功。

我找不到问题,错误函数中的警报显示“未定义”。当用户和密码正确时,它会正确创建会话,但 ajax 不会重定向,因为它总是“错误”。

希望你能帮助我。

JS - AJAX

 function validarUsuario() {
    var usuarioR = $("#cmpUsuario").val();
    var passwordR = $("#cmpPassword").val();

    if (usuarioR.length < 1) {
            $("#divTextoEstado").html("<p>Se requiere un usuario.</p>");
            return false;
    } else if (passwordR.length < 1) {
            $("#divTextoEstado").html("<p>Se requiere una contrasenha.</p>");
            return false;
    } else {
            $.ajax({
                    type: "POST",
                    url: "IniciarSesion",
                    data: "usuario=" + usuarioR + "&password=" + passwordR,
                    dataType: "json",
                    success: function (data) {
                            //alert(data.message);
                            if (data.message.equals("Success")) {
                                    window.location.href("/principal.jsp");
                            } else {
                                    $("#divTextoEstado").html("<p>User or password are incorrect.</p>");
                                    return false;
                            }
                    },
                    error: function (data) {
                            alert(data.message);
                            console.log(data);
                            return false;
                    }
            });
    }
}

伺服器

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");

            Usuario usuario = new Usuario();
            PrintWriter out = response.getWriter();

            String usuarioR = request.getParameter("usuario");
            String passwordR = request.getParameter("password");
            boolean correcto = usuario.validarUsuario(usuarioR, passwordR);

            if (correcto) {
                    usuario = new Usuario(usuarioR, passwordR);
                    HttpSession sesion = request.getSession(true);
                    sesion.setAttribute("nombre", usuario.getNombre());
                    sesion.setAttribute("apellido", usuario.getApellido());
                    sesion.setAttribute("usuario", usuario.getUsuario());

                    JsonObject myObj = new JsonObject();
                    myObj.addProperty("message", "Success");
                    System.out.println(myObj.get("message")); // To print value
                    out.println(myObj.toString());

            } else {
                    JsonObject myObj = new JsonObject();
                    myObj.addProperty("message", "User or password are incorrect.");
                    System.out.println(myObj.get("message")); // To print value
                    out.println(myObj.toString());

            }
            out.close();
    }

【问题讨论】:

  • 在登录失败的情况下,你真的应该返回一个 401。一旦你在服务器端解决了问题,(1) if(data.message.equals("Success")) 看起来更像是 java 而不是 javascript。试试if(data.message === 'Success')(尽管如果您返回 401,测试将完全消失)。 (2)jQuery.ajajx()错误回调的签名是(jqXHR, textStatus, errorThrown)

标签: javascript jquery ajax jsp servlets


【解决方案1】:

请更改:

response.setContentType("text/html;charset=UTF-8");

response.setContentType("application/json");

正如您所期望的 json 结果在您的 ajax 函数中。

【讨论】:

    【解决方案2】:

    如果您从服务器发送 json 响应,则添加

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    

    要写下您的回复,请使用

    PrintWriter out = response.getWriter();
    out.write(myObj.toString());
    

    而不是out.println(myObj.toString());,它只在您的控制台中打印,而不是在网页中。

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多