在我们的Web应用程序中,当用户退出/关闭窗口时,必须使用连接了'kill'操作的ajax调用服务器。然而,无论是卸载/ pagehide事件不会被解雇,或者没有被执行Ajax调用和我一直不能确定,为什么...Javascript - 在卸载/页面隐藏事件中调用AJAX
语境:
- 不幸的是,我们必须使用香草js;没有jQuery。
- 我很清楚onbeforeunload,但对于各种情况下,ajax调用不能在该事件发生(除非有一些神奇的 黑客,我不知道这抑制了默认弹出框 和/或提供了一种方法看到用户的回应)。
- 我们必须兼容IE7 +,FF14 +。无需支持Chrome,Safari,Opera。
- 我知道ajax功能的作品 - 它被称为无数次,而浏览器是积极的,并已经过全面测试。
相关代码...从.JSP
代码:从utils的文件
if (window.onpagehide || window.onpagehide === null) {
addEvent(window, 'pagehide', kill);
} else {
addEvent(window, 'unload', kill);
}
代码:
function addEvent(obj, evt, fnc) {
if (obj.addEventListener) { //W3C
obj.addEventListener(evt, fnc, false);
return true;
} else if (obj.attachEvent) { // MSFT
return obj.attachEvent('on' + evt, fnc);
} else { // Legacy
evt = 'on'+evt;
if(typeof obj[evt] === 'function') {
// Object already has a function on traditional
// Let's wrap it with our own function inside another function
fnc = (function(f1, f2) {
return function() {
f1.apply(this, arguments);
f2.apply(this, arguments);
}
})(obj[evt], fnc);
}
obj[evt] = fnc;
return true;
}
return false;
};
function kill() {
ajax.post({
"refCallback": null,
"sURL": "--deleted--",
"async": false,
"timeout": 10000,
"params": {"op": "kill",
"guid": guid}});
};
任何见解或指针将是非常有帮助的..
我怀疑资源被卸载,但我希望在这些资源被卸载之前快速进行ansyc ajax调用。我最终实施了一项围绕这项工作的工作(稍微不太优雅)。感谢您的确认/回答! – bcwebb88