Yönlendirme AjaxContext kullandıktan sonra çalışmıyor

2 Cevap php

Benim kontrolörleri init () yönteminde I AjaxContext-Yardımcı aramak ve denetleyici bazı yöntemler / eylemler için ayarlayın. Şöyle:

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

Şimdi bir non-ajax method için ajax-request yönlendirmesi kullanmak istediğinizde ...

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

Ben sayfa yüklemez sorun var. Ben AjaxContext başlıklarını messes çünkü varsayıyorum.

Ben yönlendirmeden önce clearHeaders ve clearContexts çalıştı ama hiçbir şey çalışır.

[edit] ilgili ajaxed yöntemi (AjaxContent) I normal olarak bir myviewscript.ajax.phtml ajax yanıt responde. Ama belli bir durumda ben şimdi başka bir denetleyici normal olmayan ajax eyleme yönlendirmek istiyorum. [/ Edit]

Herhangi bir fikir? Teşekkürler!

2 Cevap

jason yaklaşımının temelinde bir javascript yönlendirme ile yanıt vererek sorunu çözdü. Yani yerine benim her zamanki mesajın ben javascript myview.ajax.phtml yönlendirmek gönderin:

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

$this->view->response = '<script type="text/javascript">
                           window.location = "'.$url.'"
                        </script>';

Tamam. Umarım hedef anlamak.

Her şeyden önce, bir örneği üzerinde doğrudan hiçbir redirector yöntem yoktur Zend_Controller_Action.

Yani, bu:

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

Bu olmalıdır:

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

Tabii ki, denetleyici bir özelliği yönlendirici atanan ettik, sürece. Bu durumda, doğru olmalı, ama bu çift kontrol ediyorum.

Ayrıca, bir XHR isteği sırasında _redirect yöntem veya Redirector eylem yardımcısı çağırıyor olacak only redirect the XHR request itself. Eğer XHR isteği yönlendirmek için çalışıyorsun? Ya da aslında farklı bir sayfaya kullanıcının tarayıcı yönlendirme?

Edit:

All right. So, w/r/t your comment: Your goal is to redirect the user's browser session to a different page from an XHR request, if certain conditions are met. The Redirector action helper will not be of use here. There is nothing special about an XHR/Ajax request... if it sees a 301/302 redirect, it willingly follows it, just like a regular browser request. It does not do any funny business.

Yani, sorunu çözmek için, size bir şey biraz özel yapmak gerekecek. Burada çalışacak bir şey var:

  1. Ajax isteği sırasında, bir kullanıcı yönlendirme için şartlar yerine getirildiği takdirde, geri müşteriye özel tepki çeşit göndermek; size .. belirli bir dize, bir JSON yanıt ... kolayca kontrol edebilirsiniz şey istersen olabilir.
  2. Eğer istemci tarafında yanıtı aldığınızda, özel mesaj 1. Adımda gönderilen olup olmadığını görmek için kontrol edin.
  3. Bu ise, Javascript kullanarak yönlendirme preform gerekecek. window.location = whatever sadece iyi çalışır.