1

如果表单信息已更新(album.updated = true),我在窗口卸载时提交表单时遇到问题:

window.onunload = 函数(evnt){
  如果(专辑。更新){
    var save = confirm('是否要保存更改?');
    如果(保存){
      alert('提交表单...');
      document.edit_photos.submit();
    }
  }
}

它提醒“提交表单”,但没有保存任何内容。但是,当我使用“保存”按钮进行常规提交时 - 它会保存信息。这里有什么问题?

4

2 回答 2

3

您无法通过unload事件可靠地与服务器交互。

发送 AJAX 请求可能更可靠一些,但也不应该依赖。

相反,您应该处理onbeforeunload事件和return "You have unsaved changes";.
这将指示浏览器显示允许用户取消导航的确认对话框。(之后他可以手动保存)

于 2010-11-09T01:50:30.923 回答
2

你不会在unload. 曾经允许更多,但不良网站会诱骗和迷惑用户,因此已被锁定。

您唯一可以获得的交互是通过onbeforeunload. 而且您也不能可靠地提示在此处保存……通常不允许您通过直接提交表单来规避导航。您可以尝试使用 发布保存请求XMLHttpRequest,但不能保证它会在页面导航离开之前到达服务器。

所以你所能做的就是提醒用户注意未保存的数据,提示他们取消导航并自己保存数据:

window.onbeforeunload= function() {
    if (album.updated)
        return (
            'You have unsaved changes to this album. Are you sure you wish '+
            'to leave without saving?'
        );
};
于 2010-11-09T01:55:12.410 回答