3

我在beforeunloadjavascript 事件期间提交我的表单。对于所有浏览器,它的行为方式都不同。在 chrome 29 中,如果我在 1 分钟内关闭浏览器,那么它会触发服务器端操作,但如果我的应用程序空闲超过 1 分钟然后我关闭浏览器,那么它不会触发服务器。同样在 IE10 和 FF20 中,我不能闲置超过 5 分钟。

<script> 
    function updateServerCMIModel(item) {
        document.forms[0].itemID.value = item;
        formstring = top.window.CPFrame.showCurrentModelState("form");
        document.forms[0].data.value = formstring;
        document.forms[0].nextAction.value = top.window.frames.CPFrame.CPAPI.userEvent;
        document.forms[0].lmsAction.value = "update";
        document.forms[0].submit();
    }
</script>

有没有办法解决这个问题?

4

2 回答 2

0

这是一个时间问题。您需要一种方法来延迟页面的实际卸载,直到表单发布成功。一个非常典型的 hack 是在发布表单后向用户抛出一个对话(“你确定要离开这个页面吗?”),并希望用户在点击之前花几秒钟的时间。

为此,只需从事件处理程序返回一个包含您选择的消息的字符串,例如

window.onbeforeunload = function(e) {
  doFormPost();
  return 'Dialog text here.';
};
于 2013-09-24T00:25:04.667 回答
0

现在问题已解决。我通过同步 AJAX 调用实现了它。

于 2013-09-24T09:38:34.513 回答