Синхронная форма отправляется при публикации в iframe - PullRequest
2 голосов
/ 09 августа 2011

У меня есть форма, которая помещает данные в скрытый <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 ]

2 голосов
/ 09 августа 2011

Я полагаю, что самое основное решение (за исключением цикла setTimeout) могло бы иметь что-то подобное вместо функции save ()

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

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

, а затем на этой загрузке iframe будет что-то вроде

top.secondSave();
1 голос
/ 09 августа 2011

Вы можете использовать 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
          }
     });
 });

Надеюсь, это поможет.

...