【发布时间】: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