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. 문제 원인:
logout()에서 SOAPClient.invoke() 메서드가 호출됩니다. 매개변수가 true입니다. 이는 프런트엔드와 서버가 비동기적으로 통신한다는 의미입니다. 즉, 프런트엔드가 서버로부터 응답을 받지 못했습니다. 이 질문에서는 프런트 엔드가 logout()을 실행할 때 서버의 응답을 기다리기 전에 페이지를 닫았기 때문에 logout()이 실행되지 않은 것으로 나타납니다.
3.
프런트 엔드와 서버 간의 통신 방식을 동기화로 변경 즉, SOAPClient.invoke() 메서드에서 true를 false로 변경하면 문제가 해결됩니다.