在onbeforeunload中使用Ajax自动保存字段数据
Using Ajax in onbeforeunload to autosave field data
我试图在窗口中使用AJAX。Onbeforeunload功能自动保存在我的网站页面上的文本字段(没有保存按钮,它都是在后台完成的)。保存函数是用PHP编写的。我开始尝试如下:
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??)函数实现同步方式的自动保存?我不是javascript或jquery专家,我在网上找到的例子令人困惑。
你的最后一个例子应该工作,你需要改变asynch: false
为async: false
(额外的h必须删除)根据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) {}
};
相关文章:
- 保存尝试保存字段/列,但不保存值
- 保存输入字段Chrome扩展名
- 使用javascript或jquery保存输入字段值
- 使用带有链接的javascript,使用Struts2保存页面字段值
- Javascript,PHP,保存字段值
- 保存到视图中的多个隐藏字段
- 将多个文档中的字段保存到对象
- 如何在 select2() 字段中保存排序顺序
- 将画布另存为 jpeg 格式,并通过 js 将输入字段保存到数据库
- 从动态生成的输入字段中获取下拉列表中的数据,而无需保存值 - jquery
- SuiteCRM内联编辑的字段未保存
- 如何在JEditable/JQuery中保存事件后字段的更新值
- CRM 2011,保存后,字段将恢复为不可见
- 从保存在节点 mongodb 本机中的 beeing 中排除字段
- 在MongoDB中保存虚线字段
- Javascript 新对象字段未保存
- 如何在任何索引字段中验证 ng-repeat 中的保存按钮
- 无法获取光滑网格将数据保存到隐藏字段
- 当用户关闭浏览器时是否可以保存所有字段信息
- 在onbeforeunload中使用Ajax自动保存字段数据