Zend redirect()不支持AJAX请求?

时间:2011-08-18 15:09:59

标签: php zend-framework redirect

例如我在Controller中有一个动作。

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

当我以正常方式调用上述操作时,它会成功重定向到所需位置但是当我通过AJAX调用上述操作时,它不会重定向到所需的URL,只会在firebug中显示所需的页面内容。

AJAX的JS代码

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 个答案:

答案 0 :(得分:5)

当您使用重定向时,您会向用户的浏览器发送标题以获取新位置的内容。

通常不会设置AJAX请求来处理此类重定向。他们只是发起请求,并返回响应。

最佳解决方案是重新组织代码,以便不需要重定向。如果无法消除重定向,则必须更新Javascript以识别重定向状态(例如,HTTP 301)并发起新请求。

答案 1 :(得分:2)

你不能直接做,这就是我要做的。在通过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);
}

答案 2 :(得分:1)

ajax请求本身将受重定向的影响,而不是浏览器窗口。因此,您会将重定向的内容视为通过ajax返回的数据。一个解决方案是在成功运行ajax请求后执行javascript重定向。