1. คำอธิบายปัญหา:
Widow.location = function () ถูกกำหนดไว้ใน JS เมื่อหน้าถูกปิดฟังก์ชั่น logout () จะไม่ถูกดำเนินการ
window.onunload = function () {logout (); } ฟังก์ชั่น 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, "ออกจากระบบ", PL, เท็จ, การโทรกลับ); -2. สาเหตุของปัญหา:
วิธี SOAPClient.invoke () เรียกว่าใน logout () โดยมีพารามิเตอร์จริงซึ่งหมายความว่า front-end และเซิร์ฟเวอร์สื่อสารในลักษณะอะซิงโครนัส นั่นคือส่วนหน้าไม่ได้รับการตอบกลับจากฝั่งเซิร์ฟเวอร์และคำสั่งต่อไปนี้ได้ถูกดำเนินการแล้ว ในปัญหานี้ส่วนหน้าได้ปิดหน้าก่อนที่การตอบสนองของเซิร์ฟเวอร์จะถูกดำเนินการดังนั้นจึงไม่ปรากฏว่าล็อกเอาต์ () ยังไม่ถูกดำเนินการ
3. วิธีแก้ปัญหา:
เปลี่ยนวิธีการสื่อสารระหว่าง front-end และเซิร์ฟเวอร์เป็นแบบซิงโครนัสนั่นคือเปลี่ยนความจริงในวิธีการ soopclient.invoke () เป็นเท็จและปัญหาได้รับการแก้ไขแล้ว