在onunload中调用ajax不成功 - Web 开发 / Ajax
我在页面的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");.....}[解决办法]
估计跟窗口的关闭有关。。。
------解决方案--------------------
我没有看代码!不过我以前也遇到过类似的问题,也许你的程序在opera浏览器里可以正常运行!
你可以这样试,在ajax的url里加一个随机参数:
- JScript code
function fr(){ alert("fr"); checkuser('movie.do?method=delSession&r="+Math.random()+"','0','1'); alert("delsession"); }
[解决办法]
,后台没有输出?
---
什么意思。。没看明白
[解决办法]
不懂
[解决办法]
xmlHttp.open("GET",url,true);alert("7");
xmlHttp.open("GET",url,false);alert("7");
试一试同步看,异步的话刚开始执行,还没有返回窗口就已经关闭了。
[解决办法]
你的代码是否执行的判断方法不正确。。。。
System.out.println("13");输出没意义啊,你页面关闭了输出给谁用啊,也不知道有没有执行。
你可以在java代码中加一个写文件的操作,生成一个文件。这样关闭页面时有没有执行你的java代码你可以根据是否有生成文件来判断