使用Jquery + AJAX在servlet中使用sendRedirect的问题

时间:2011-07-14 09:11:35

标签: javascript servlets jquery post redirect

我会尽力解释我的问题/问题。

在我的jsp中,我有一些链接,一个用于论坛的每个消息。当我单击任何“.delete”链接时,将触发以下脚本:

$('.delete').click(function(event) {
    event.preventDefault();

    // some data recovering from the jsp's tags
    var idMsg = $(this).closest('.li').attr('id');
    var action = $(this).attr('name');
    var origin = $('div#origin').attr('name');
    ...

    // some checking
    //alert('id: '+idMsg);
    ...

    // I send the info to delete the message in the servlet
    $.post("../app/ForumCampus", {action:action, idMsg:idMsg, origin:origin}, function(data) {
    });

    //$('.output').append('Message deleted successfully.');
});

起初,我不想刷新页面,我只显示了上面的成功消息。

但是现在,由于分页,我需要刷新servlet,并且我在post方法中有以下代码:

response.sendRedirect(contextPath+"/app/" + origin);

但是当AJAX进入servlet时,会执行所有操作(正确删除消息),但不会重定向到servlet。页面没有刷新。如果我手动刷新页面一切正常,删除的消息不会出现。

我的问题是:

1)servlet没有重定向,因为脚本还没有完成?为什么呢?

2)我可以在.click事件中键入以下代码来刷新servlet:

location.reload();

但是,有什么方法可以考虑更好?不使用Javascript或其他东西?

感谢您的进步,与您共同学习真是太酷了:)

2 个答案:

答案 0 :(得分:4)

显然,您的Ajax调用不会在浏览器中执行重定向,应该如何工作?请记住,这是一个“幕后”的异步调用。

如果要使用Ajax控制重定向,则必须检查Ajax调用的结果(HTTP标头),然后使用JavaScript手动重定向(例如,使用document.location)。

顺便说一句:我认为这不是一个好主意。在复杂的Ajax应用程序的情况下,Javascript函数扮演MVC模式调用控制器的角色。因此,您的Ajax函数应知道何时重定向。

答案 1 :(得分:0)

我认为Ajax用于异步java脚本和XML,它在后台运行,所以不是重定向,你可以使用servlet中的request.getparameter()获取html输入标记的所有值,并使用

重定向该servlet

Javascript或jquery:

 document.<formname>.action="<%=response.encodeURL("<sevlet name>")%>";
 document.AdminForm.submit();   

这适合你吗?