如何从AJAX发送对JSP的调用?

时间:2015-11-03 09:02:26

标签: ajax jsp servlets

这个servlet代码,这里我要发送返回消息(如果消息!= null)到Ajax for alert和第二个如果message == null我想调用另一个jsp并将列表传递给这个jsp。< / p>

    if(message!=null){
                response.setContentType("text/plain");
                response.getWriter().write(message);
            }else{
                JSONObject jobj = new JSONObject();
                String urlToRedirect = "SearchEmployee.jsp";
                jobj.put("url",urlToRedirect );
                response.getWriter().write(jobj.toString());
                }

在这里,我无法理解如何在其他部分

中调用此jsp url
    $.ajax({
        type:"POST",
        url:'../SearchEmployeeServlet',

        data:$('#DisplayEmployeeListForm').serialize(),//$('form').serialize();
        success:function(msg){
            if(msg!=""){
                alert(msg);
                window.location.reload(true);
            }else{
                ....here i want to call 2nd jsp

            }

        }
    });

2 个答案:

答案 0 :(得分:1)

您可以转发请求服务器端,以避免客户端发出第二个请求:

request.getRequestDispatcher("SearchEmployee.jsp").forward(request, response);

或者,您可以发送HTTP重定向响应,因此客户端应自动处理重定向到第二个请求:

response.sendRedirect(response.encodeRedirectUrl("SearchEmployee.jsp"));

请注意,您在JavaScript中处理此问题的方式取决于您希望从SearchEmployee.jsp收到的数据类型。例如,如果它是XML并且您已将响应内容类型设置为text/xml,jQuery将解析它并将XML DOM对象传递给您的success函数:

success:function(msg) {
    if (msg instanceof XMLDocument) {
        // handle list
    } else {
        alert(msg);
        window.location.reload(true);
    }
}

如果您期待HTML,可能会以字符串形式返回,因此您可以测试返回的字符串是否以某些HTML开头。例如,如果您的HTML始终以<ul>标记开头:

success:function(msg) {
    if (msg.startsWith("<ul>")) { // note you may need to do msg = $.trim(msg) first
        // handle list
    } else {
        alert(msg);
        window.location.reload(true);
    }
}

如果你不想按照上面的建议自动转发,而你宁愿坚持当前的做法,那么你需要做一些改变。

if(msg!="")函数中使用success是不好的,因为只要服务器没有返回空响应,它就会返回true(所以在这两种情况下你都会得到#{1}}警报)。

要做的第一件事是在servlet代码中添加content-type标头,以表明你在第二种情况下返回JSON:

response.setContentType("application/json");
response.getWriter().write(jobj.toString());

现在,当jQuery处理响应时,它会在调用success函数之前尝试将其解析为JSON。因此,您现在可以在成功函数中测试jQuery给出的参数是对象还是字符串:

success:function(msg){
    if (typeof msg === "object") {
        // you got the JSON response
        $.ajax({
            url: msg.url,
            // etc...
        });
    } else {
        // you got the plain text response
        alert(msg);
        window.location.reload(true);
    }
}

答案 1 :(得分:0)

如上所述,只需在else部分中创建ajax请求。

$.ajax({url: "jsp url", success: function(result){

}});

查找更多信息here