私のアプリケーションには、ユーザーがこの画面を離れるまで永遠にループするサーバーとクライアントの間の通信を確立するセクションがあります。ユーザーが画面を離れると、私は$rootScope.$on('$stateChangeStart')
でこの問題を検出し、$ httpコールを送信してサーバーのプロセスを停止します。AngularJS:タブ/ブラウザでのサーバーコールのクローズ
ユーザーが現在のタブまたはブラウザを閉じるときに同じ$ httpを実行したいが、これを行うことができない。私は$rootScope.$on('$stateChangeStart')
またはいくつかの他の点では、この関数を呼び出すとき、それは動作しますが、言ったように
function cancelCommProcess(webId, commActionId) {
return $http.get(BASE_URL + '/rest/comm/kill-current-com-process/' + webId + '/' + commActionId)
.then(
function(response) {
return response;
}
);
}
:
このすべての最初には、$ HTTP呼び出しを行うサービス機能です。
今、私はタブ/ブラウザを閉じたときに、この関数を呼び出すために、次のコードを持っている:
$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では動作しません。もちろん
$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呼び出しがサーバに到達した)作品呼び出しはこのメッセージを表示するだけでサーバーに到達します。
私はあなたの助けに感謝するので、これがどのように動作するか分かりません。 $ http呼び出しのアイデアは、現在の通信プロセスを中断するようにサーバーに指示することですが、この方法は真実ではないと感じています。
これに最も適した方法は何ですか?
ありがとうございます。
を使用することができますDestoryは。 – rocotocloc