没有警报,Javascript window.onbeforeunload无法正常工作

时间:2012-02-01 21:14:40

标签: javascript

您好我在页面关闭或导航到另一个页面后使用javascript来保存信息。我的问题是当我在window.onbeforeunload中调用webservice时它不会触发我不会得到结果。但是,如果我在功能webservice结束时发出警报,我会得到结果。我根本不想使用警报。有什么办法。我的代码如下:

    window.onbeforeunload = InitializeService;
     function InitializeService() {
        if (window.XMLHttpRequest) {

            var url = "http://localhost:54329/WebServices/PageUnloadCall.asmx?op=Page_Unload";

           myReq.onreadystatechange = checkStatus1;

           myReq.open("GET", url, true); // true indicates asynchronous request

           myReq.send();

      //     alert("Your Call Record Has Been Saved!");

     }
     }
     function checkStatus1() {

         if (myReq.readyState == 4) // Completed operation
         {

             myReq.open("POST", "http://localhost:54329/WebServices/PageUnloadCall.asmx/Page_Unload", false);

             myReq.send();

         }
     }

正如你在函数InitializeService中看到的那样,我不想在那里使用Alert,但如果我不这样做,我就不会得到结果。

3 个答案:

答案 0 :(得分:0)

那是因为在您的webservice调用返回之前onbeforeunload已经很久(完成,完成)。您的webservice调用已启动并且可能已到达服务器(检查服务器上的日志;添加日志调用以进行验证),但浏览器决定不等待 - 这是设计原因,因为用户正在离开页面。

如果您的唯一目标是报告此事件,那么您可能会很好(因为您可能正在获取此事件),但如果您打算在之后执行任何操作,请查看是否可以更改该服务的行为打电话给同步:

myReq.open("GET", url, false);

答案 1 :(得分:0)

警报允许异步调用完成允许响应。变化:

myReq.open("GET", url, true);

为:

myReq.open("GET", url, false);

答案 2 :(得分:0)

尝试同步请求(不知道它是否有效):

myReq.open("GET", url, false); // false => synchronous request

应该导致unbeforeunload处理程序在返回之前等待调用完成,并让卸载继续。