2012-02-01 153 views
0

嗨我使用JavaScript来保存信息后,页面将要关闭或导航到另一个页面。我的问题是,当我打电话给window.onbeforeunload webservice它不会开火,我没有得到结果。但是如果我把警报在函数Web服务会解雇的结束,我得到result.I不希望在所有。就是使用警报有任何way.my代码如下:Javascript的window.onbeforeunload不工作没有警报

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,但是如果我不用,我不会得到结果。

+1

你永远不会得到请求或警报只是允许异步调用完成?设置为false,看看它是否适合你。 – OnResolve 2012-02-01 21:17:13

+0

谢谢,这是唯一的原因。我试着从3小时谢谢。 – Hiren 2012-02-01 21:19:56

回答

0

该警报允许异步呼叫完成允许响应。变化:

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

到:

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

这将是因为onbeforeunload早在您的web服务调用返回之前就已完成(完成,完成)。你的web服务调用被启动,它可能到达服务器(检查服务器日志;添加一个日志调用来验证),但浏览器决定不等待 - 这是有目的的,因为用户正在离开页面。

如果你唯一的目标是报告这个事件,你可能没有问题(因为你可能会得到它),但是如果你打算在AFTER之后做任何事情,看看它是否会工作,如果你改变那个行为服务呼叫同步:

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

尝试同步的请求(不知道是否它会工作):

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

应引起unbeforeunload处理等待在返回之前调用完成,并让卸载继续。