2014-10-07 94 views
0

我怎样才能让这段代码等待,直到表单得到响应。该表格必须重新提交并在可以继续之前重新收到回复。等待完成使用jQuery/Javascript

如果有一种方法,以保证有响应将是很好的还挺像的成功:或错误:

$("#pay_window").dialog({ 
      autoOpen: false, 
      width: 600, 
      buttons: { 
       "Submit Payment": function(){ 
        $("#PaymentForm").submit(); 



       <--- NEED A WAIT FUNCTION HERE ---> 



        var dialogbox = $(this); 
        $.ajax({ 
         url: "/payment", 
         data: $(this).find([company_id, billing_email, first_name, last_name, recurly_token, selected_plan, account]).serialize(), 
         type: "POST", 
         success: function (data) { 
          dialogbox.dialog("close"); 
          alert('Payment Completed') 

         }, 
         error: function (jqXHR, textStatus, errorThrown) { 
          alert('error: ' + textStatus + ': ' + errorThrown); 
         } 
        }); 
        return false; 
       } 
      } 
     }); 
+0

只是通过你的等待功能''$的complete'选项.ajax' – hindmost 2014-10-07 21:30:35

+1

AJAX是异步的,您不会等待,代码的其余部分会继续运行,并且成功或错误时会调用成功或错误回调。所以在请求之后必须发生的任何事情都必须在回调中发生。或者你可以返回一个延迟对象并稍后处理该回调。 – elclanrs 2014-10-07 21:30:44

回答

1

表单提交是基本同样的事情,作为一个后由指定的端点表单的“action”属性(或包含表单的页面)。您可以收集表单数据并发布帖子(通过jQuery重复使用),然后使用jQuery的Deferred对象方法('then','done','fail'等)或使用$ .ajax和成功/错误选项...授予这在IE 7/8/9中不起作用(无法访问FormData对象)。

基于这个过于简单的形式:

<form id="foo" action="http://example.com/" method="POST"> 
    <input type="hidden" name="q" value="a"> 
</form> 

一个可以抓住的输入,并创建一个 'FORMDATA' 对象:

var $foo = $('#foo'), 
    formData = new FormData($foo[0]), 


$.ajax({ 
    url: $foo.attr('action'), 
    data: formData, 
    type: "POST", 
    success: function (data) { 
     /* do what you want */}, 
    error: function (jqXHR, textStatus, errorThrown) { 
     /* do what you've got to */ } 
});