我在我的應用程序中建立了一個服務器和客戶端之間的通信,直到用戶離開此屏幕才永遠循環。當用戶離開屏幕時,我通過$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調用的想法是告訴服務器中斷當前的通信過程,但我覺得這種方法不是真實的。
你能幫我弄清楚什麼是最好的方法嗎?
謝謝。
當標籤/瀏覽器關閉這不會被觸發。 – rocotocloc