2011-08-11 9 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; 
       } 
       } 
     }); 

のようなコールを提出作っていますが、私はの終わりに偽のリターンを置けば問題は....このコールが第二のthatsとAjaxが完了する前に、ページがすでに更新されています私のjsonを見ることができるコールは正しいですが、何らかの理由で私はそれを今までやっていません。これを修正する方法に関するアイデア

+0

における非同期偽に設定する必要がありますフォームが提出されるまで結果を得る。同期呼び出しに変更する必要があります(つまり、結果が返ってくるまでは何も起こりません - ユーザーの観点から見れば醜いかもしれません)か、デフォルトのフォーム送信を防ぎ、結果を受け取ったら自分で送信してください。 – nnnnnn

+0

どのように私はそれを同期に変更するのですか? – Trace

+0

async:false; –

答えて

1

submitイベントが発生するとすぐにpreventDefault()を使用してください。次に、paypalからの応答を待ってから、フォームの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設定 'async:false'を使用してください。http://api.jquery.com/jQuery.ajax/ –

0

あなたはそれはあなたが勝っ関係なく、どのように高速ことを意味し、それは非同期だそれは「時間がかかりすぎて」いない要求

+0

どうすればいいですか? – Trace

関連する問題