>  기사  >  웹 프론트엔드  >  page_javascript 스킬 종료 시 window.location 이벤트가 실행되지 않는 이유에 대한 분석 및 해결 방법

page_javascript 스킬 종료 시 window.location 이벤트가 실행되지 않는 이유에 대한 분석 및 해결 방법

WBOY
WBOY원래의
2016-05-16 16:38:221092검색

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로 변경하면 문제가 해결됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.