例如我在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请求后重定向到操作?
由于
答案 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重定向。