发布到iframe时提交同步表单

时间:2011-08-09 12:04:47

标签: javascript forms submit synchronous

我有一个表格,可以将数据发布到隐藏的<iframe>,以防止页面发生变化。但是,我希望“保存”按钮连续执行两个submit(),一个接一个。

<form name="updatedocform" id="updatedocform" method="post" action="http://foo.bar" enctype="multipart/form-data" target="hiddenframe">
    ...
    <input type="submit" onclick="save(); return false;" value="Save" />
</form>
<iframe name="hiddenframe" id="hiddenframe"></iframe>

JavaScript的:

function save() {
    document.updatedocform.submit();
    // change some form values here
    // alert("paused"); // if this alert is here, everything works fine
    document.updatedocform.submit();
}

然而,在第一个加载完成之前,第二个submit()被调用。有没有办法让第二次提交等待第一次提交?

我可以使用setTimeout(),但我想要一个更清晰的解决方案,而不依赖于网络的速度。

2 个答案:

答案 0 :(得分:2)

我想最基本的解决方案(循环setTimeout除外)可能是这样的,而不是save()函数

var firstSaving = false;
function save() {
    document.updatedocform.submit();
    firstSaving = true;
}

function secondSave() {
    if(firstSaving)
    {
        firstSaving = false;
        document.updatedocform.submit();
    }
}

然后在那个iframe onload上有类似

的东西
top.secondSave();

答案 1 :(得分:1)

您可以使用jquery $ .ajax()

您必须拦截第一次提交的click事件,通过ajax发送表单数据然后您可以绑定到ajax插件完整回调函数并使第二个iframe提交。

$("submit").click(function () {
      $(this).closest("form").ajax({
          url: "test.html",
          data: $("form").serialize(),
          success: function(){
             //fire second submit event
          }
     });
 });

希望这有帮助。