7

そのため、ajaxを使用してデータベースから条件が検証された場合にのみ送信したいフォームがあります。preventDefault()条件が真の場合、つまりユーザーが居住者でない場合、変数が真に設定されて呼び出される場合、メソッドajax successs functionを使用していますがpreventDefault()、これを行うと、フォームは常に送信されます。async が false に設定されていても、ajax が終了するのを待ちません。これがコードです。

  $('#button').click(function(e) {    
    if ($('#ca_resident').prop('checked') == true) { 
      amount=$('#user-amount').val().replace(/[,]/g,"");
      project_name=$('#project_name').val();
      var not_resident = false;
       $.ajax({
        url: '/main/verify_residence/',
        type: 'POST',
        aysnc: false,
        data: {
          value: amount,
          name: project_name
        },
        success: function(data){
          $("#verify_residence").html(data);
          not_resident = true;
        },
        dataType: 'html'
      }); 
    }
    if(not_resident){
      e.preventDefault();
    }
  });
4

1 に答える 1

6

それはうまくいきません。成功は の後に発火します:

if(not_resident){
      e.preventDefault();
    }

非同期なので。ボタンのクリックを常にキャンセルし、成功したらフォームを送信する必要があります。

$('#button').click(function(e) {    
   var $form = $(this).closest('form');   

   if ($('#ca_resident').prop('checked') == true) { 
      amount=$('#user-amount').val().replace(/[,]/g,"");
      project_name=$('#project_name').val();
       $.ajax({
        url: '/main/verify_residence/',
        type: 'POST',
        aysnc: false,
        data: {
          value: amount,
          name: project_name
        },
        success: function(data){
          $("#verify_residence").html(data);
          $form.submit();
        },
        dataType: 'html'
      }); 
    }


    e.preventDefault();

  });
于 2013-07-04T10:51:17.633 に答える