Javascript 在onbeforeunload中使用Ajax自动保存字段数据
我试图在window.onbeforeuload函数中使用AJAX自动保存我站点页面上的文本字段(没有保存按钮,都是在后台完成的)。保存函数是用PHP编写的。我开始尝试以下方法:Javascript 在onbeforeunload中使用Ajax自动保存字段数据,javascript,synchronous,onbeforeunload,autosave,Javascript,Synchronous,Onbeforeunload,Autosave,我试图在window.onbeforeuload函数中使用AJAX自动保存我站点页面上的文本字段(没有保存按钮,都是在后台完成的)。保存函数是用PHP编写的。我开始尝试以下方法: window.onbeforeunload = function(e){ var noteelement = document.getElementById( 'note' ); var mynote = noteelement.value; $.post('save_my_note.php', { th
window.onbeforeunload = function(e){
var noteelement = document.getElementById( 'note' );
var mynote = noteelement.value;
$.post('save_my_note.php', { thenote: mynote }, function(data){});
};
在研究过程中,我逐渐了解到,由于ajax调用的异步性质,php代码不会被调用,因为窗口在函数从服务器启动之前关闭
当然,正如其他人所说,如果我向onbeforeunload函数添加一个返回值以使对话框弹出(即“您确定要离开”对话框),它确实可以工作,因为.post调用在对话框等待响应时有时间运行:
$.post('save_my_note.php', { thenote: mynote }, function(data){});
return mynote;
};
有人说,我必须将此post调用更改为异步AJAX,以便函数等待函数完成,但由于我对语法不是很精通,我不太确定我需要的语法。我尝试了以下方法来代替post功能:
$.ajax({
url: "save_my_note.php",
data: "{thenote: mynote}",
async: false
});
然而,这似乎也不起作用
有没有人有一个简单的代码示例,可以通过onbeforeunload(或onunload???)函数以同步方式实现autosave?我不是javascript或jquery专家,我在网上找到的例子令人困惑 也许你可以强制暂停超时-不知道这是否真的有效,只是猜测一下:
var bSaved = false;
window.onbeforeunload = function(e){
bSaved = false;
var noteelement = document.getElementById( 'note' );
var mynote = noteelement.value;
$.post('save_my_note.php', { thenote: mynote }, function(data){ bSaved = true; });
window.setTimeout('bSaved = true',2000);
while (!bSaved) {}
};
您的上一个示例应该可以运行,您需要将
asynch:false
更改为async:false
(必须删除额外的h)您的意思是在上一个代码段中键入async:false
?请参阅此问题以获得答案:请注意,在移动浏览器中不会触发OnBeforeLoad,因此,如果你是为了迎合移动市场的需求,那么你可能必须以不同的方式处理问题。我已经读到,将其更改为ajax并使用async:true应该会导致服务器端代码暂停,等待完成后再继续,但我无法让它工作。超时充其量只是偶然的,它会在我所有的页面关闭之前增加一个强制性的等待时间。这不是我必须输入的时间,而是一个最大超时时间。一旦服务器返回,页面将立即卸载,或在两秒钟内卸载,以先到者为准。@MattH超时(和成功回调)将永远不会被触发,因为它将永远卡在while循环中。