日期:2014-05-16  浏览次数:20967 次

在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");
.....
}



------解决方案--------------------
估计跟窗口的关闭有关。。。
asp.net mvc json解决办法