【问题标题】:Javascript form submit is not working sometimeJavascript表单提交有时不起作用
【发布时间】:2013-09-20 13:19:38
【问题描述】:

我在beforeunload javascript 事件期间提交我的表单。 对于所有浏览器,它的行为方式都不同。 在 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>

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

【问题讨论】:

  • 如果您不关闭浏览器,而是按例如 HOME 按钮,它可以工作吗?
  • 是的,如果我点击页面内的任何链接,它就可以工作。但要求是在浏览器关闭时保存详细信息。
  • 如何创建一个对象并使用对象信息触发一个 ajax 发布请求?这对你有用吗?

标签: javascript forms


【解决方案1】:

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

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

window.onbeforeunload = function(e) {
  doFormPost();
  return 'Dialog text here.';
};

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多