0

我不想使用 AJAX 提交我的表单,但我想通过在表单提交期间向服务器发出几个 GET 请求来制作进度条,因为提交可能需要一段时间来上传多个文件。我发现在 webkit 浏览器中,我无法在表单提交时发出 GET 请求,我看到将表单提交到 iframe 可以让我这样做。

标记如下所示:

<form action="/my-action" target="target-iframe">
...
</form>
<iframe name="target-iframe"></iframe>

和 JavaScript:

$(document).ready(function() {
  $("form").on("submit", function() {
    $.get("/other-action", function(data) {
      // Use data returned here
    });
  });
});

我仍然没有收到关于 GET 请求的数据——我怎样才能让它工作?

4

1 回答 1

3
$(document).ready(function() {
  $("form").on("submit", function(e) { //add a parameter e - the event object
     e.preventDefault(); //stop the form from submitting
    $.get("/other-action", function(data) {
      // Use data returned here
    });
  });
});

编辑

设置一个标志,在您收到您的响应表单您的获取请求之前不允许表单提交。收到回复后,设置您的标志以允许您的表单提交,然后以编程方式重新提交。

$(document).ready(function() {
  var canISubmit = false;
  $("form").on("submit", function(e) { //add a parameter e - the event object
     var el = $(this);
     if(!canISubmit) {
       e.preventDefault();


       $.get("/other-action", function(data) {
         canISubmit = true;
         el.submit();
       });
     }


  });
});

确定您的请求已完成的唯一方法$.get是确保在您的请求完成之前表单不会提交和重定向页面$.get

编辑#2

$(document).ready(function() {

  $("form").on("submit", function(e) { //add a parameter e - the event object
     e.preventDefault();

     $.post("url",$(this).serialize())
        .done(function(response,status,jqXHR) {

            $.get("/other-action")
                .done(function(response,status,jqXHR) {
                    //other stuff done

                    //refresh the page or do whatever....
                })
                .fail(function() {
                    //$.get failed
                });

        })
        .fail(function() {
            //$.post failed
        });

  });

});
于 2013-10-28T17:20:22.610 回答