1. Description du problème :
Définissez width.location = function() dans JS Lorsque la page est fermée, la fonction logout() n'est pas exécutée.
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. Cause du problème :
La méthode SOAPClient.invoke() est appelée dans logout(). Le paramètre est vrai, ce qui signifie que le front-end et le serveur communiquent de manière asynchrone, c'est-à-dire que le front-end n'a pas reçu la réponse du serveur. et a déjà exécuté les instructions suivantes. Dans cette question, il semble que lorsque le frontal exécute logout(), il a fermé la page avant d'attendre la réponse du serveur, il semble donc que logout() n'a pas été exécuté.
3.Solution :
Changez la méthode de communication entre le front-end et le serveur en synchronisation, c'est-à-dire remplacez true dans la méthode SOAPClient.invoke() par false, et le problème est résolu.