其实我正在使用ajax调用,我的代码示例在这里..请不要介意语法
$.ajax(
url: "mysite/action1",
success: function(resp) {
$("#divId").html(resp);
});
像这样我将响应文本加载到一个div标签中。现在我的问题是在zend控制器中我试图检查一个条件,如果会话过期意味着重定向到登录页面或者发送该动作的响应html代码。
public function action1Action() {
$login = new Zend_Session_Namespace('login');
if (isset($login->employee_id)) {
echo $html;
} else{
$this->view->headMeta()->appendHttpEquiv('refresh','1');
//$this->_helper->redirector->gotoUrl($this->view->baseUrl());
//$this->_helper->redirector('index', 'index');
}
}
我试过这三种方式
$this->view->headMeta()->appendHttpEquiv('refresh','1'); -- Nothing happening
$this->_helper->redirector->gotoUrl($this->view->baseUrl()); and $this->_helper->redirector('index', 'index'); -- loads login page within the div tag (as it is taking as the ajax response)
我只是想重新加载页面。就像触发浏览器刷新按钮来实现我想要的那样..请提出任何想法来解决我的问题..
注意:我想从服务器端重新加载页面,而不是检查ajax响应。有没有办法做到这一点?
答案 0 :(得分:0)
正如您所提到的,您正试图触发"浏览器刷新",这是一个前端事件。所以我不在那里你可以在后端做到这一点。
可以使用简单的js代码
来实现window.location.reload();
答案 1 :(得分:0)
当会话到期时,只使用正确的HTTP code 401抛出异常。
throw new Zend_Controller_Action_Exception('User not authorized', 401);
然后你可以为ajaxError写一个全局回调函数并重新加载页面或者在你想要的地方重定向用户。
$( document ).ajaxError(function(event, jqxhr) {
if (jqxhr.status === 401) {
window.location = '/'; // Use same base url here
}
});
您可以更进一步,在preDispatch函数上编写ACL插件以抛出此异常。然后只是一点点ErrorController,所以用户也被重定向到登录页面,你将对所有请求保持一致的行为,而不仅仅是XHR请求。