我有一个带有ajax请求的工作仪表板。我在一些事件上发出ajax请求,这些事件将更新仪表板的一部分。但是如果会话已过期,则将使用登录页面刷新该部分。如果会话已经过期,如何在ajax调用后进行重定向?
我的ajax电话:
$.ajax({
type: "POST",
url: $(this).data('path'),
data: { datas : {
/* some datas */
}},
success: function(data){
$('#mydivtorefresh').html(data);
},
error: function(){
showFlash();
},
});
和我的控制员:
public function myControllerAction(Request $request)
{
/* some logic */
return $this->render('my/template/toUp.html.twig',array('results' => $results));
一切运作良好,但是如果我的会话过期并且我称之为ajax请求,我将在' #mydivtorefresh'中获取登录页面。而不是全局重定向。我尝试使用eventListener或使用AjaxError回调但没有成功。有什么帮助吗?
答案 0 :(得分:1)
找到了一个有效的解决方案:
在我的全局控制器中添加一个功能,检查会话是否仍处于活动状态,如果是,则回答“ok”,否则回复“ko”。
public function pingAction()
{
$securityContext = $this->container->get('security.context');
if ($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED') || $securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
return new Response("ok");
}
return new Response("ko");
}
我每次使用preFilter jquery事件触发ajax调用时都会检查它:
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
if(originalOptions.data == "CHECKPING"){
return;
}
$.get( Routing.generate('el_ping'), "CHECKPING", function( res ) {
if(res == "ko"){
window.location.replace(Routing.generate('fos_user_security_login'));
}
});
});