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();
时,表单提交但我必须手动刷新页面才能看到数据更改。
我已经搜索过类似的问题,但到目前为止还无法解决问题。我尝试过的事情:
name
参数更改为NAME
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);
}
});
答案 0 :(得分:1)
由于您的代码表示您在获取响应之前尝试重新加载页面,因此请求未完成,为此您必须使用回调函数中的ajax和reload页面延迟重新加载或更好地提交表单。