[英]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.