Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重定向不';使用AjaxContext后无法工作_Php_Ajax_Zend Framework_Header - Fatal编程技术网

Php 重定向不';使用AjaxContext后无法工作

Php 重定向不';使用AjaxContext后无法工作,php,ajax,zend-framework,header,Php,Ajax,Zend Framework,Header,在controllers init()方法中,我调用AjaxContext帮助器,并为该控制器中的某些方法/操作设置它。像这样: public function init() { $ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext->addActionContext('setlabel', 'html'); $ajaxContext->initContext()

在controllers init()方法中,我调用AjaxContext帮助器,并为该控制器中的某些方法/操作设置它。像这样:

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和ClearContext,但没有任何效果

[edit]在相应的ajaxed方法(AjaxContent)中,我通常会用ajax响应myviewscript.ajax.phtml。但在某种情况下,我现在想重定向到另一个控制器中的正常非ajax操作。[/edit]


有什么想法吗?谢谢

好的。希望我能理解你的目标

首先,在
Zend\u Controller\u Action
的实例上没有直接的
重定向器
方法

那么这个,

$this->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));
应该是这样的:

$this->_helper->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));
当然,除非您已将重定向器分配给控制器的属性。在这种情况下,你应该是对的,但我会仔细检查一下

此外,在XHR请求期间调用
\u redirect
方法或Redirector action helper只会重定向XHR请求本身。您正在尝试重定向XHR请求吗?或者将用户的浏览器重定向到其他页面

编辑:

好的。因此,请您发表评论: 您的目标是在满足某些条件的情况下,将用户的浏览器会话重定向到与XHR请求不同的页面。重定向程序操作帮助程序在此处不起作用。XHR/Ajax请求没有什么特别之处。。。如果它看到一个301/302重定向,它会自动跟随它,就像一个普通的浏览器请求一样。它不做任何有趣的事情

所以,为了解决你的问题,你必须做一些习惯性的事情。以下是一些可行的方法:

  • 在Ajax请求期间,如果满足用户重定向的条件,则向客户端发送某种特殊响应;它可以是你想要的任何东西。。一个特定的字符串,一个JSON响应。。。任何你能轻易检查的东西
  • 当您在客户端收到响应时,检查它是否是您在步骤1中发送的特殊消息
  • 如果是,则必须使用Javascript执行重定向
    window.location=无论什么
    都可以正常工作
  • 在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>';
    
    $url=$this->view->url(数组('controller'=>'team'),
    “操作”=>“管理”,
    'id'=>$teamID),null,null);
    $this->view->response=
    window.location=“”.$url.”
    ';
    
    你到底想做什么?您想重定向AJAX请求、在AJAX请求后重定向用户,还是仅仅在使用AjaxContext助手的控制器中的正常请求上重定向用户?如果是第一个,请检查相关问题。在提供帮助之前,我们确实需要更多的上下文(哈!)。我有一个私有的$redirector,在init()中我分配$this->\u helper->getHelper('redirector');所以这应该没问题。但是如果你说我只是重定向XHR请求,那一定是问题所在。事实上,我只想重定向用户。还要注意,您要重定向到的URL可能是该响应的一部分。谢谢,我现在了解了一些关于XHR的知识!根据你的方法,我找到了一个更容易的解决办法。见我贴出的答案。