1. 問題の説明:
JS で width.location = function() を定義します。ページが閉じられると、logout() 関数は実行されません。
window.onunload = function() { logout(); } function logout(reqParam, callback){ var userManageServiceUrl = "http://" + getServerAddr() + "/axis2/services/UserManageService"; var urlList = []; var url = window.location.href; urlList = url.split("?"); var sessionID = urlList[1]; reqParam.sessionID = sessionID; var pl = new SOAPClientParameters(); var reqParamStr = JSON.stringify(reqParam); pl.add("reqParam", reqParamStr); SOAPClient.invoke(userManageServiceUrl, "logout", pl, false, callback); }
2. 問題の原因:
SOAPClient.invoke() メソッドが logout() で呼び出されます。パラメーターは true です。これは、フロントエンドとサーバーが非同期で通信することを意味します。つまり、フロントエンドがサーバーから応答を受信していないことを意味します。この質問では、次のステートメントをすでに実行しています。フロントエンドが logout() を実行するときに、サーバーの応答を待つ前にページを閉じているため、logout() が実行されていないように見えます。
3. 解決策:
フロントエンドとサーバー間の通信方法を同期に変更する、つまり、SOAPClient.invoke() メソッドの true を false に変更すると、問題は解決します。