2011-06-01 99 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, ...);