2011-08-11 69 views
0

我有我想要確保PayPal的電子郵件地址是有效的我之前提交的表單。所以,我想提出一個jQuery的提交呼叫這樣jQuery的AJAX調用時間太長或東西

 $('#new_user').submit(function(){ 
      $.ajax({ 
       type: 'post', 
       url: "/validate_paypal",    
       dataType: 'json', 
      data: {email : $('#user_paypal_email').val()}, 
       success: function(data) { 
       if (data.response["valid"] == false){ 
         $('#user_paypal_email').closest('.field').addClass('fieldWithErrors'); 
         $('#user_paypal_email').append('<span style="color:#E77776;">This is not a valid email address</span>'); 
         return false; 
       }else{ 
         return true; 
       } 
       } 
     }); 

但問題是這種調用多數民衆贊成在第二和頁面刷新已前阿賈克斯完成....如果我把回在年底假呼叫我可以看到我的JSON是正確的,但由於某種原因,我有它的方式,現在慣於結束......就如何糾正這種

+0

這不是「時間太長」異步假的,它是異步的,這意味着,無論它是多麼快,你贏了」在表單提交之後才能得到結果。你需要或者其更改爲同步調用(這意味着_nothing_會發生,直到結果回來 - 但從用戶的角度可能是醜陋的)或阻止默認的表單提交,然後提交它自己,一旦你得到你的結果。 – nnnnnn

+0

我如何將其更改爲同步 – Trace

+0

使用異步:假的; –

回答

1

任何想法,只要使用preventDefault()方法時,立即觸發事件提交。然後等待貝寶的回覆,然後在表單上調用submit()。

$('#new_user').submit(function(e){ 
    e.preventDefault(); 
    var form = $(this); //save reference to form 
      $.ajax({ 
       type: 'post', 
       url: "/validate_paypal",    
       dataType: 'json', 
       data: {email : $('#user_paypal_email').val()}, 
       success: function(data) { 
        if (data.response["valid"] == false){ 
         $('#user_paypal_email').closest('.field').addClass('fieldWithErrors'); 
         $('#user_paypal_email').append('<span style="color:#E77776;">This is not a valid email address</span>'); 
         return false; 
       }else{ 
         form.unbind('submit'); //remove binding 
         form.submit(); //submit form 
       } 
       } 
     }); 
+0

@Tamer我更新了答案提交,因此不會保持自稱之前取消綁定。如果你想使異步調用同步,然後使用AJAX設置「異步:假」 http://api.jquery.com/jQuery.ajax/ –

0

如果你想做些什麼的時候了,你就需要設置在請求

+0

怎麼樣我這樣做 – Trace