Проблема с использованием sendRedirect в сервлете с использованием Jquery + AJAX - PullRequest
2 голосов
/ 14 июля 2011

Я постараюсь объяснить мои вопросы / проблемы легко.

В моем 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.');
});

Сначала я не хотел обновлять страницу и показывал только указанное выше сообщение об успехе.

Но теперь, из-за нумерации страниц, мне нужно обновить сервлет, и у меня есть следующий код в методе post:

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

Но когда AJAX переходит к сервлету, все выполняет (корректно удаляет сообщение), но не перенаправляет на сервлет. Страница не обновилась. Если я обновлю страницу вручную, все в порядке, удаленное сообщение не появится.

Мои вопросы:

1) Сервлет не перенаправляет, потому что скрипт еще не закончен? Почему?

2) Я могу обновить сервлет, просто набрав следующий код в событии .click:

location.reload();

Но есть способ, который вы считаете лучшим? Без использования Javascript или чего-то еще?

Спасибо за заранее, учиться с тобой так здорово:)

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

Очевидно, что ваш вызов Ajax не выполняет перенаправление в браузере, как это должно работать?Помните, это асинхронный вызов «за кулисами».

Если вы хотите управлять перенаправлениями с помощью Ajax, вы должны изучить результат вызова Ajax (заголовки HTTP), а затем вручную перенаправить с помощью JavaScript (например, используя document.location).

Кстати: я думаю, что это не очень хорошая идея.В случае сложного Ajax-приложения функции Javascript играют роль того, что шаблон MVC называет контроллером.Итак, ваша Ajax-функция должна знать , когда нужно перенаправлять.

0 голосов
/ 09 июля 2013

Я думаю, что Ajax используется для асинхронного java-скрипта и XML и работает в фоновом режиме, поэтому вместо перенаправления вы можете просто получить все значения входного тега html, используя request.getparameter () в сервлете, и перенаправить этот сервлет, используя

Javascript или jquery:

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

Подходит ли это для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...