2011-05-15 108 views
1

我正在使用jQuery表單插件向服務器提交數據。在提交之前,我正通過ajax運行服務器端驗證。所以結構是從jquery ajax響應中獲取值而不設置異步false

function validateForm(formData, jqForm, options){ 
    var check = true; //have to set check to false to avoid form submit 

    .... 
    looping through form elements and putting values in to data array here 
    .... 

    function sendData(callback){ 

     $.ajax({ 
     url:'validate.php', 
     data:data, 
     dataType:'json', 
     //async:false, if I uncomment this, code works as I want 
     success:callback 
     }); 

    } 

    function processForm(response){ 
     $.each(response,function(i,res){ 
     //if validation is fail I'm setting check = false here 
     }); 
    } 

    sendData(processForm); 

    return check; 

}) 

因爲我看到設置異步爲false是不好的做法,我怎麼能設置檢查值爲false使用回調?

回答

0

不要嘗試返回數據。在回調內部(或者在你調用的函數中)做任何需要做的工作。

+0

你能給我舉個例子嗎? – ThilinaG 2011-05-15 07:54:58

+0

替換「/ /如果驗證失敗我在這裏設置檢查=假」與「做任何你想做的事情,如果檢查是假的」 – Quentin 2011-05-15 09:08:53

+0

如果驗證失敗,我需要從此函數返回false,所以jquery表單插件塊提交。 – ThilinaG 2011-05-15 14:39:27

0

你見過jQuery .submit()函數嗎?您可以致電.preventDefault()取消提交驗證失敗的提交。

實例的jQuery:

<script> 

$("form").submit(function() { 
    if ($("input:first").val() == "correct") { 
    $("span").text("Validated...").show(); 
    return true; 
    } 
    $("span").text("Not valid!").show().fadeOut(1000); 
    return false; 
}); 

</script> 

你可以做你的驗證和提交兩個階段 - 驗證,然後再使用提交在OnAJAXSuccess處理程序。

+0

我使用jQuery表單插件來提交數據。 [鏈接](http://jquery.malsup.com/form/) – ThilinaG 2011-05-15 07:54:16