我在页面的onunload方法中调用ajax来移除session的属性,由于页面刷新或关闭都会有onunload事件,有在ajax调用后台方法中加了个判断。
当我刷新页面时ajax执行成功。而我直接关闭时,ajax执行不成功。
我在js中每句后都加了alert来打印ajax执行的状态,在后台方法中加上在控制台输出“方法执行”,根据alert发现ajax都是执行了的,但是在控制台中没有输出“方法执行”(这里的输出与判断无关,我是在让后台方法一执行就输出)。
我原本以为是因为onunload会关闭窗口,因此改为在onbeforeunload中调用ajax,但是还是一样,ajax打印执行无误,后台没有输出?
请大大们帮帮忙看看是怎么回事?
这个事我的ajax代码
- JScript code
var xmlHttp = false; var td; var e; var url; function createXmlHttpRequest(){alert("1.1"); if(window.XMLHttpRequest){alert("1.1.1"); xmlHttp = new XMLHttpRequest();alert("1.1.2"); if(xmlHttp.overrideMimeType){alert("1.1.3"); xmlHttp.overrideMimeType(text/xml);alert("1.1.4"); }alert("1.1.5"); }else if(window.ActiveXObject){alert("1.2"); try{alert("1.2.1"); xmlHttp = new ActiveXObject("Msxml2.XMLHttp");alert("1.2.2"); }catch(e){alert("1.2.3"); try{alert("1.2.4"); xmlHttp = new ActiveXObject("Microsoft.XMLHttp");alert("1.2.5"); }catch(e){alert("1.2.6"); } } } if(!xmlHttp){alert("1.3"); alert(xmlHttp+"err");alert("1.3.1"); } } function checkuser(o,otd,ourl){ alert("1"); url = ourl;alert("2"); td = otd;alert("3"); createXmlHttpRequest();alert("4"); var url = o;alert("5"); xmlHttp.open("GET",url,true);alert("7"); xmlHttp.send(null);alert("8"); xmlHttp.onreadystateChange= checkrs;alert("6"); } function checkrs(){ alert("6.1"); if(xmlHttp.readyState == 4){alert("6.2"); if(xmlHttp.status == 200){alert("6.3"); var s = xmlHttp.responseText;alert("6.4"); } } }
上面中的ajax方法的名称请不要介意,这个是我直接用之前的ajax,没去改方法名
以下是我在页面中的调用的html代码
- HTML code
<script type="text/javascript" src="javascript/del.js"></script> <script type="text/javascript"> function deld(){ alert("close"); } function fr(){ alert("fr"); checkuser('movie.do?method=delSession','0','1'); alert("delsession"); } </script> </head> <body onbeforeunload="fr();" onunload="deld();" >
这个事后台方法
- Java code
public ActionForward delSession(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("11"); if(request.getSession(false).getAttribute("confirm")!=null){ System.out.println("12"); request.getSession().removeAttribute("confirm"); System.out.println("13"); }else{ System.out.println("21"); request.getSession().removeAttribute("palyId"); request.getSession().removeAttribute("target"); System.out.println("211"); } System.out.println("22"); ..... }
------解决方案--------------------
估计跟窗口的关闭有关。。。
------解决方案--------------------