2012-12-08 20 views
0

好的,我有表單驗證function.the函數運行通過表單驗證函數,如果該字段無效返回false。嘗試驗證ajax調用後的結果

的問題是,當它得到的是使用AJAX來檢查該字段爲有效的功能。

由於某種原因,它似乎並不「等待」 AJAX返回,並自動返回false。

有沒有辦法解決這個問題?

下面是代碼:

function form_validation(){ 

    if (!NewValidationForm('pcode', 'Please fill in all the fields')) 
     return false; 
    if (!NewValidationForm('fname', 'Please fill in all the fields')) 
     return false; 

    if(!validate_coupon()){ 
     alert("bad!!"); 
     return false; 
    } 

    return true; 
} 

function validate_coupon(){ 
    var url = $j("#site_url").val() + 'ajax_functions.php'; 
    var coupon = $j("#pcode").val(); 
    var result_status = false; // seem its jumps from here to: 

    $j.ajax({ 
    type: "POST", 
    url: url, 
    data: { ajax: 'ajax', coupon: coupon} 
    }).success(function(insertID){ 
     var obj = $j.parseJSON(insertID); 
     if(obj.status == 1){ 
      result_status = true; 
     } 
    }); 
    // straight over here 
    if(result_status == true){ 
     return true; 
    } 
} 
+1

_「出於某種原因」_--那會是因爲Ajax是異步的。 '$ .ajax()'調用立即返回是完全正常的,並且您的成功(或錯誤)回調稍後會被調用。你應該重構一下你的代碼,以便在你的Ajax成功處理程序完成成功驗證後,你想要做的任何事情。 – nnnnnn

+0

這是怎樣的一個問題,我試圖讓人們提交表單僅當字段驗證,所以我做,直到真正從驗證函數返回它返回假的。我試圖提交表單時,Ajax調用返回但這似乎沒有工作 –

回答

0

通常在這種情況下,我做這樣的事情在$(document).ready()

$('form').submit(function (evt) { 
    if (!$(this).attr('data-submitted')) { 
     evt.preventDefault(); 
     $(this).attr('data-submitted', 'true'); 
     // call your form validation code here that fires the ajax request 
     return false; 
    } 
    return true; 
}); 

然後,在你$.ajax回調,當您的驗證完成後,調用$('form').submit()。這有效地使用表單上的屬性作爲驗證請求狀態的標誌。當用戶第一次提交表單時,標誌被設置並且驗證過程開始。當驗證完成時,表單的提交事件被觸發,並且由於該標誌被設置,這次該表單被正常提交。

如果這種方法對你的作品,你可能會想加入少許潤色。例如,在調用$.ajax之前,您可能希望禁用提交按鈕,如果驗證失敗,則再次啓用它。你也可能會想如果驗證失敗,除去從形式data-submitted屬性,因爲用戶可能會提交表單第二個時間,你可能想在這種情況下,進行另一次驗證。

+0

感謝艾米莉我會嘗試 –

+0

我剛剛編輯:調用$(「形式」)提交()而不是觸發按鈕的點擊。並確保您的提交按鈕沒有name =「submit」;請參閱http://stackoverflow.com/questions/729330/jquery-triggersubmit-breaking。 – Emily

+0

感謝您的幫助,我會盡力嘗試。 –