2017-03-29 103 views
0

我在我的應用程序中建立了一個服務器和客戶端之間的通信,直到用戶離開此屏幕才永遠循環。當用戶離開屏幕時,我通過$rootScope.$on('$stateChangeStart')檢測到此問題,併發送$ http調用以停止服務器中的進程。AngularJS:服務器調用選項卡/瀏覽器關閉

我想在用戶關閉當前選項卡或瀏覽器時執行相同的$ http,但我無法完成此操作。

這一切首先是服務功能,使$ HTTP調用:

function cancelCommProcess(webId, commActionId) { 
      return $http.get(BASE_URL + '/rest/comm/kill-current-com-process/' + webId + '/' + commActionId) 
      .then(
        function(response) { 
         return response; 
        } 
      ); 
     } 

正如我所說的,當我打電話的$rootScope.$on('$stateChangeStart')或其他一些點這個功能,它的工作原理。

現在我有下面的代碼時,標籤/關閉瀏覽器調用這個函數:

$window.onbeforeunload = function (evt) { 
      if ($rootScope.CMC_ACTION_IDENTIFIER.CMC_ACTION_MONITORING === currentCommActionId) { 
       CMCService.cancelCommProcess(currentWebId, currentCommActionId) 
        .then(
          function() { 
           console.log('HELLO'); 
          } 
        ); 
      } 
     } 

這樣的$ HTTP調用不會到達服務器,但如果我只是做了下一個變化,那麼它的工作原理如下:

$window.onbeforeunload = function (evt) { 
      if ($rootScope.CMC_ACTION_IDENTIFIER.CMC_ACTION_MONITORING === currentCommActionId) { 
       CMCService.cancelCommProcess(currentWebId, currentCommActionId) 
        .then(
          function() { 
           myTest(); 
          } 
        ); 
      } 
     } 

     function myTest() { 
      console.log('HELLO'); 
     } 

此外,以前的方法在Chrome和Firefox中可用,但在Edge中不可用。但是,它的工作原理(我的意思是,$ HTTP調用到達服務器),如果我不喜歡這樣寫道:

$window.onbeforeunload = function (evt) { 
    if ($rootScope.CMC_ACTION_IDENTIFIER.CMC_ACTION_MONITORING === currentCommActionId) { 
     CMCService.cancelCommProcess(currentWebId, currentCommActionId) 
      .then(
        function() { 
         myTest(); 
         //console.log('HELLO'); 
        } 
      ); 
    } 
    return ""; 
} 

function myTest() { 
    console.log('HELLO'); 
} 

當然我得到的確認消息是去是留的頁面,但我不知道爲什麼該呼叫僅通過顯示此消息到達服務器。

我真的不明白這是如何工作,所以我感謝您的幫助。 $ http調用的想法是告訴服務器中斷當前的通信過程,但我覺得這種方法不是真實的。

你能幫我弄清楚什麼是最好的方法嗎?

謝謝。

回答

0

我建議你使用socket.io,它使客戶端和服務器之間的連接保持活動狀態,而不是在服務器端循環。

此事件火的時候控制器destory你可以用它

$scope.$on('$destroy', function() { 
    console.log("destory"); 
}); 
+0

當標籤/瀏覽器關閉這不會被觸發。 – rocotocloc

相關問題