如何从jquery到Servlet正确调用ajax?

时间:2018-03-11 09:20:39

标签: java jquery servlets

我在调用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");

如果失败它按照我想要的方式工作,如果成功我需要导航到管理主页,但代码响应整个页面作为响应文本。

1 个答案:

答案 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');
}