JQuery Ajax и перенаправить ответ с сервера - PullRequest
6 голосов
/ 07 июля 2011

У меня есть ситуация, когда я отправляю запрос jjery ajax post, но в моем веб-приложении обработчик для этого конкретного запроса ajax (после обработки параметров post) будет вызывать действие в другом контроллере (не уверен, называется ли это перенаправлением) который в основном отображает всю страницу сайта (например, обновление страницы). Но я замечаю, что браузер продолжает отображать ту же страницу, а не обновлять содержимое новой страницы.

Что-то не так? Как я могу справиться с этой ситуацией?

Мне пришлось отредактировать свой вопрос, потому что я изменил свой вызов ajax.

Вот как выглядит код:

function chkSubmit(event, actionType) {


        var msgid = showlst('Please wait ...');
        var data = ''
        if (actionType == 'IAmDone') {
            var letters = 'e,b,c'

            data = 'actionType=' + actionType + '&letters=' + letters;

        } else data = 'actionType=' + actionType;
        $j.ajax({
            type: 'POST',       
            url: context + '/app/handleChk',
            data:  data
        });

        return false;
}

Приведенная выше функция запускается при нажатии кнопки на странице. Но эта же страница продолжает отображаться. Отладчик браузера показывает, что он получил ответ 200 OK от нового действия, которым он должен был обновить страницу. Я использую браузер Chrome и JQuery 1.6.1

Извините за опечатку в примере кода. Я исправил это.

Ответы [ 4 ]

11 голосов
/ 07 июля 2011

Сервер не может выполнить перенаправление из запроса ajax.В конце концов, ajax вовлекает клиента (браузер).Если вы хотите перенаправить, вы можете сделать это, но это должно быть сделано на стороне клиента, в обратном вызове.Вы можете сделать это, возвращая объект с сервера, который содержит URL-адрес, на который вы хотите перенаправить --- вы можете затем JavaScript, чтобы изменить свойство местоположения документа.Я думаю, что это имело бы смысл, если бы вы не перенаправляли во всех случаях, или если ваш вызов на стороне сервера был длительным процессом.Если это не так, то вызов ajax, вероятно, не имеет смысла.

2 голосов
/ 07 июля 2011

Пример того, что было сказано @ ek_ny.

jQuery.ajaxSetup({
    complete: function (request, textStatus) {
        // header inserted manually on the server.
        // you should block the automatic redirect headers 
        // inserted by the server.
        var location = request.getResponseHeader("Location");
        if(location) window.location = location; 
    }
});
2 голосов
/ 07 июля 2011

Возможно, я неправильно понял ваш вопрос, но где ваша функция обратного вызова в этом вызове ajax?Здесь вы обычно представляете результаты в представление, также вы можете использовать обратный вызов ошибки, чтобы получить некоторые данные о том, что, если что-то идет не так:

function chkSubmit(event, actionType) {


        var msgid = showlst('Please wait ...');
        var actionType = type // per j. tuskan - looks like no such var in scope
        var data = ''
        if (actionType == 'IAmDone') {
            var letters = 'e,b,c'

            data = 'actionType=' + actionType + '&letters=' + letters;

        } else data = 'actionType=' + actionType;
        $j.ajax({
            type: 'POST',       
            url: context + '/app/handleChk',
            data:  data,
            success:function(the_data){
              alert("Now I can do stuff with the ajax response which is: "+the_data);
            }
        });

        return false;
}
0 голосов
/ 26 марта 2019

Вы не можете выполнять перенаправление на стороне сервера, используя Ajax, потому что всякий раз, когда вы используете Ajax, ответ приходит на функцию успеха / ошибки Ajax.Вы можете выполнить перенаправление на стороне сервера, используя «форму» в JavaScript.

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