您好我在页面关闭或导航到另一个页面后使用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,但如果我不这样做,我就不会得到结果。
答案 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
处理程序在返回之前等待调用完成,并让卸载继续。