2014-10-07 41 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 */ } 
});