2011-06-01 106 views
1

我有一個困難的時間試圖讓這個JavaScript函數返回一個.post()函數的內部錯誤。jQuery AJAX回調

這甚至可能嗎?還是有另一種方法來做一個簡單的ajax檢查來驗證憑證代碼在數據庫中。

function check_options(){  
     var voucher_code = $('#voucher_code').val(); 
     $.post(baseURL+"ajax.php", { tool: "vouchers", action: "check_voucher", voucher_code: voucher_code }, 
      function(data) { 
      if(data == 'invalid'){ 
       // NEED TO RETURN FALSE FOR THE MAIN FUNCTION 
      } 
     }); 

} 
+0

你有沒有想過使用jQuery表單驗證插件,如jquery.validate? – GordonM 2011-06-01 17:59:29

回答

4

您不能對主函數返回false,因爲它已經在ajax調用完成時處理完畢。你需要使用回調。

function check_options(callback) { 
    var voucher_code = $('#voucher_code').val(); 
    $.post(baseURL + "ajax.php", { 
     tool: "vouchers", 
     action: "check_voucher", 
     voucher_code: voucher_code 
    }, function(data) { 
     if (data == 'invalid') { 
      callback && callback(false); 
     } else { 
      callback && callback(true); 
     } 
    }); 

} 

check_options(function(result) { 
    // Handle True/False based on result 
}); 
2

您不能對主函數返回false,因爲後調用是異步的。該函數將在$ .post調用後立即返回,現在當響應到達時。當網絡調用返回時,將調用在參數中傳遞的函數,但此時主函數將很長時間完成。

基本上,你試圖做一個同步網絡調用,並沒有辦法在JS中做到這一點。

+1

你可以進行同步網絡調用,這只是一個可怕的想法。 – Robert 2011-06-01 18:00:46

+0

我認爲這是不可能的,很高興知道。謝謝! – carlosfigueira 2011-06-01 18:01:35

0
function check_options(){  
    var voucher_code = $('#voucher_code').val(); 
    $.ajax({ 
    type: 'POST',, 
    url: baseURL+"ajax.php", 
    data: { tool: "vouchers", action: "check_voucher", voucher_code: voucher_code }, 
    success: function(msg){ 
     alert('Success!'); 
    }, 
    error:function(e){ 
     alert('Fail!'); 
    } 
    }); 
} 
0

$.post如上所述是異步的。因此,在主函數(check_options)完成執行(並返回)之後,您想要返回false的函數實際上正在執行。我會建議修改你的控制流來解決異步調用,或者使調用同步(我相信應該有一個額外的參數,「異步」)。

$.post({async:false, ...);