在我們的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