Zend redirect () не работает с AJAX-запросом? - PullRequest
0 голосов
/ 18 августа 2011

Например, у меня есть действие в контроллере.

public function redirectnowAction() {
   $this->_redirect( '/module/controller/action' );
}

Когда я вызываю вышеуказанное действие обычным способом, оно успешно перенаправляется в нужное место. Но когда я вызываю вышеуказанное действие через AJAX, оно не перенаправляется наОбязательный URL и показывать только содержимое страницы в Firebug.

JS-код для AJAX

jQuery('.AjaxLink').live( 'click', function(event) {
    event.preventDefault();
    // load the href attribute of the link that was clicked
    jQuery.getJSON(this.href, function(snippets) {
        for(var id in snippets) {
            // updated to deal with any type of HTML
            jQuery('#' + id).html( snippets[id] );
        }
    });
});

Как перенаправить на действие после AJAX-запроса?

Спасибо

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

Когда вы используете перенаправление, вы отправляете заголовок в браузер пользователя для извлечения контента на новом месте.

AJAX-запросы обычно не устанавливаются для обработки таких перенаправлений. Они просто инициируют запрос и возвращают ответ.

Лучшее решение - реорганизовать код, чтобы перенаправление не требовалось. Если вы не можете устранить перенаправление, вы должны обновить свой Javascript для распознавания статуса перенаправления (например, HTTP 301) и инициировать новый запрос.

2 голосов
/ 18 августа 2011

Вы не можете сделать это напрямую, вот что я бы сделал.В действие, вызываемое через AJAX, включите что-то вроде этого:

echo Zend_Json::encode(array('redirect' => '/module/controller/action'));

Таким образом, ваш вызов AJAX получит объект JSON в качестве ответа.В вызове jQuery $.ajax() вы можете указать событие success, например:

'dataType': 'json', // expects to receive a JSON-formatted response
'success': function(data, textStatus, jqXHR) {
    window.location.replace('http://www.example.com' + data.redirect);
}
1 голос
/ 18 августа 2011

Сам запрос ajax будет перенаправлен, а не окном браузера. Следовательно, вы увидите перенаправленный контент как данные, возвращаемые через ajax. Одним из решений будет перенаправление javascript после успешного выполнения ajax-запроса.

...