Перенаправление не работает после использования AjaxContext - PullRequest
3 голосов
/ 19 июля 2009

В моем методе init () контроллеров я вызываю AjaxContext-Helper и устанавливаю его для некоторых методов / действий в этом контроллере. Вот так:

public function init()
{
    $ajaxContext = $this->_helper->getHelper('AjaxContext');
    $ajaxContext->addActionContext('setlabel', 'html');
    $ajaxContext->initContext();
}

Теперь, когда я хочу использовать перенаправление с ajax-запроса на не-ajax метод ...

$this->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));

У меня проблема с тем, что страница не загружается. Я предполагаю, что это потому, что AjaxContext испортил заголовки.

Я пробовал clearHeaders и clearContexts перед перенаправлением, но ничего не работает.

[edit] в соответствующем ajaxed-методе (AjaxContent) Я обычно отвечаю ajax-ответом на myviewscript.ajax.phtml. Но в определенном случае я теперь хочу перенаправить на обычное действие без ajax в другом контроллере. [/ Edit]

Есть идеи? Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 июля 2009

Хорошо. Надеюсь, я понимаю вашу цель.

Прежде всего, нет метода redirector непосредственно в экземпляре Zend_Controller_Action.

Итак, это:

$this->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));

Должно быть так:

$this->_helper->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));

Если, конечно, вы не присвоили перенаправитель свойству контроллера. В этом случае вы должны быть правы, но я бы дважды это проверил.

Кроме того, вызов метода _redirect или помощника по действиям Redirector во время запроса XHR перенаправит только сам запрос XHR . Вы пытаетесь перенаправить запрос XHR? Или фактически перенаправить браузер пользователя на другую страницу?

Edit:

Хорошо. Итак, ж / т / т ваш комментарий: Ваша цель - перенаправить сеанс браузера пользователя на страницу, отличную от запроса XHR, если соблюдены определенные условия. Redirector action helper здесь не пригодится. В запросе XHR / Ajax нет ничего особенного ... если он видит перенаправление 301/302, он охотно следует ему, как обычный запрос браузера. Это не смешно.

Итак, чтобы решить вашу проблему, вам нужно сделать что-то немного более нестандартное. Вот что будет работать:

  1. Во время запроса Ajax, если выполнены условия для перенаправления пользователя, отправьте клиенту какой-то особый ответ; это может быть что угодно ... конкретная строка, ответ JSON ... все, что вы можете легко проверить.
  2. Когда вы получите ответ на стороне клиента, проверьте его, чтобы узнать, является ли это специальное сообщение, отправленное вами на шаге 1.
  3. Если это так, вам придется предварительно выполнить перенаправление, используя Javascript. window.location = whatever будет работать просто отлично.
2 голосов
/ 20 июля 2009

На основе подхода jason s я решил проблему, ответив перенаправлением javascript. Поэтому вместо моего обычного сообщения я отправляю редирект javascript на myview.ajax.phtml:

$url = $this->view->url(array('controller' => 'team', 
                              'action' => 'manage', 
                              'id' => $teamID), null, null);

$this->view->response = '<script type="text/javascript">
                           window.location = "'.$url.'"
                        </script>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...