POST到iframe时,location.reload会阻止表单提交(Firefox 37.0.2)

时间:2015-04-21 13:25:17

标签: javascript jquery html firefox iframe

Firefox版本为37.0.2

我有一个MVC应用程序,我提交表单以执行CRUD功能。我POST到隐藏的iframe,然后在POST后刷新页面,以便用户在数据库更新后可以看到新数据。以下是负责添加新用户的javascript函数:

$('#submitNewUser').click(function () {
                document.getElementById("newUser").submit();
                $('#newUser').remove();
                location.reload();
 }

submitNewUser是用于提交表单(ID和名称)的按钮。 newUser是提交的模式表单的名称和ID。因此,点击submitNewUser按钮,提交newUser表单,然后移除newUser模态窗口,然后重新加载页面。

此功能可在Chrome和IE中按预期(或至少按照我的意图)运行。在Firefox中,页面重新加载而不提交表单。控制台中没有错误,只是看起来像页面刷新。当我注释掉该行:location.reload();时,表单提交但我必须手动刷新页面才能看到数据更改。

我已经搜索过类似的问题,但到目前为止还无法解决问题。我尝试过的事情:

  • 将iframe的name参数更改为NAME
  • 从iframe的名称和ID参数中删除任何大写字母
  • 使用window.location = window.location代替location.reload()
  • 我将输入类型从button更改为submit,并将javascript函数修改为表单的onSubmit,但行为与我原来报告的问题相同
  • 我从表单中删除了target参数,然后从javascript中删除了location.reload()行。然后,所有浏览器的行为都是相同的:表单被提交,页面被重定向到我的成功!"页。这告诉我location.reload()发生了一些事情,以及它如何与Firefox中的iframe交互。这是我的iframe代码:

    <iframe id="new_user_hidden_frame" name="new_user_hidden_frame" class="hide"></iframe>

这是我为POST方法设置目标的地方:

<form id="newUser" method="POST" action='<c:url value="/createUser.htm" />' target="new_user_hidden_frame">

修改 根据公认的答案,Firefox实际上是唯一一个技术上正确处理这个问题的浏览器!我在收到回复之前刷新了页面,因此行为是100%合适的。我在我的函数中添加了以下内容,因此页面不会刷新,直到收到响应:

$.ajax({
     success: function() {
     window.location.reload(true);
     }
});

1 个答案:

答案 0 :(得分:1)

由于您的代码表示您在获取响应之前尝试重新加载页面,因此请求未完成,为此您必须使用回调函数中的ajax和reload页面延迟重新加载或更好地提交表单。