2015-06-16 32 views
0

我有一個帶有ajax請求的工作儀表板。我在某些會更新儀表板一部分的事件上發出ajax請求。但是如果會話已過期,則會使用登錄頁面刷新該部分。如果會話已過期,如何在ajax調用之後執行重定向?Symfony2:如果會話超時,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回調,但沒有成功。任何幫助?

回答

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"); 
} 

和我檢查它的每一個時期的Ajax調用使用前置過濾器的jQuery事件觸發:

$.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')); 
     } 
    }); 
}); 
相關問題