2013-07-04 56 views
5

所以我只想提交一個表單,當使用ajax從數據庫驗證一個條件時。如果條件爲真,即如果用戶不是居民,則使用preventDefault()方法,但ajax successs function中的變量設置爲true,preventDefault()被調用,但是,執行此操作時,表單始終提交。即使異步設置爲false,它也不會等待ajax完成。 這是代碼。如何讓表單在提交前等待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(); 
    } 
    }); 
+0

阻止默認調用AJAX之前和'ajax.success'然後你可以'form.submit()' – Vogel612

+0

嘗試返回假;而不是e.preventDeafult()。 –

+1

@ Vogel612我曾嘗試過這樣做。這可以防止表單在任何情況下提交。表單應提交時,用戶不失敗居住檢查 – user2488801

回答

4

這將無法正常工作。成功將火

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(); 

    }); 
+0

感謝利亞姆,但我需要的是,如果用戶失敗的居住條件表單不提交,完全相反。 'success function'中的'e.preventDefault()'。仍然沒有運氣 – user2488801

+0

@ user2488801這將做到這一點,如果'成功'沒有命中。該表單將不會提交。 'e.preventDefault();'停止總是提交的表單。 '$ form.submit();'只有'成功'時才發佈帖子 – Liam

+0

當用戶未通過驗證並且不允許進一步查看(即無表單提交)時,「成功」就是一種情況。 – user2488801

相關問題