【问题标题】:Synchronous form submits when posting to iframe发布到 iframe 时同步表单提交
【发布时间】:2011-08-09 12:04:46
【问题描述】:

我有一个将数据发布到隐藏的<iframe> 的表单,以防止页面更改。但是我希望保存按钮一个接一个地执行两个连续的submit()s。

<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(),但我想要一个不依赖于网络速度的更简洁的解决方案。

【问题讨论】:

    标签: javascript forms submit synchronous


    【解决方案1】:

    我想最基本的解决方案(循环 setTimeout 除外)可能是使用类似的东西而不是 save() 函数

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

    然后在 iframe 上加载类似

    top.secondSave();
    

    【讨论】:

    • 我发现了一个信号量! :D
    【解决方案2】:

    你可以使用 jquery $.ajax()

    你必须拦截第一次提交的点击事件,通过ajax发送表单数据,然后你可以绑定到ajax插件完成回调函数并进行第二次iframe提交。

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

    希望这会有所帮助。

    【讨论】:

    • 我不能使用 Ajax,因为它不直接支持文件上传(至少不是可移植的方式)。
    • 在这种情况下,可能值得一试 $.ajaxForm() 插件jquery.malsup.com/form/#file-upload。这允许您指定 iframe: true 作为选项来执行您正在尝试执行的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多