首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

在onunload中调用ajax不成功

2012-03-02 
在onunload中调用ajax不成功 - Web 开发 / Ajax我在页面的onunload方法中调用ajax来移除session的属性,由

在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代码你可以根据是否有生成文件来判断

热点排行