繁体   English   中英

Zend redirect()无法与AJAX请求一起使用?

[英]Zend redirect() is not working with AJAX request?

例如,我在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请求后如何重定向到操作?

谢谢

使用重定向时,会将标头发送到用户的浏览器以在新位置获取内容。

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

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

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

Ajax请求本身将进行重定向,而不是浏览器窗口。 因此,您将看到重定向的内容作为通过ajax返回的数据。 一种解决方案是在ajax请求成功运行后执行javascript重定向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM