我在调用ajax请求时遇到问题.Servlet将整个页面作为响应返回
HTML代码
<form action="userlogin" method="POST">
User name : <input type="text" name="username" id="username"/><br/>
Password : <input type="text" name="password" id="password"/><br/>
<input type="submit" value="Login" name="submitbtn" id="submitbtn"/><br/>
<label id="failedText"></label>
</form>
JQuery代码
$(document).ready(function () {
$("input[name='submitbtn']").click(function (e) {
e.preventDefault();
$.ajax({
url: 'userlogin',
type: 'POST',
data: $("form[action='userlogin']").serializeArray(),
success: function (responseText) {
if (responseText != 'failure')
$("form[action='userlogin']").submit();
else
$('#failedText').text('Invalid Username or password');
}
});
});
});
Serlet Code
String username = request.getParameter("username");
String password = request.getParameter("password");
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
if (username.equals("admin") && password.equals("password")) {
path = "adminhome.html";
response.sendRedirect(path);
}else
response.getWriter().write("failure");
如果失败它按照我想要的方式工作,如果成功我需要导航到管理主页,但代码响应整个页面作为响应文本。
答案 0 :(得分:0)
执行response.sendRedirect(path)
时,浏览器会再次调用加载新路径。在您的情况下,第一次请求userlogin
是 AJAX 调用,$.ajax
将遵循重定向并获取要呈现的最终html,因此您将获得该结果。
您可以将路径作为字符串返回并使用JS加载内容,而不是执行sendRedirect
。
更新管理员用户检查的Servlet代码
if (username.equals("admin") && password.equals("password")) {
path = "adminhome.html";
response.getWriter().write(path);
}
并将JS更新为
success: function (responseText) {
if (responseText != 'failure')
// make sure you provide the correct URL from the server
window.location = responseText;
else
$('#failedText').text('Invalid Username or password');
}