2013-07-06 41 views
1

我有一个使用Ajax的jQuery函数。它总是返回undefined,我可以找出原因。带Ajax的jQuery函数返回undefined

我发现,如果我提醒在$.post功能它的工作原理注册的变量,但不会,如果我外面试试。

function signup(){ 

    var username = $('#su-username').val(); 
    var password = $('#su-password').val(); 

    if(username!='' && password!=''){ 

     $.post("register.php", { user: username, pass: password }).done(function(response){ 

      if($.trim(response)=='1'){ 
       alert('Username Taken, Please choose another'); 
       var registered = 0; 
      }else{ 
       var registered = 1; 
      } 

     }); 

    } else { 

     alert('Username and password cannot be empty'); 
     var registered = 0; 
    } 
    return registered; 
} 

回答

3

当你处理像AJAX异步操作我们建议尽量使用回调功能。例如:

function signup(callback) { 

    var username = $('#su-username').val(), 
     password = $('#su-password').val(), 
     registered = 0; 

    if (username != '' && password != '') { 

     $.post("register.php", { user: username, pass: password }).done(function(response) { 
      if ($.trim(response) == '1') { 
       alert('Username Taken, Please choose another'); 
      } 
      else { 
       registered = 1; 
      } 

      // Delayed callback invocation after AJAX request 
      callback(registered); 
     }); 
    } 
    else { 
     alert('Username and password cannot be empty'); 
     callback(registered); // Immediate invocation of the callback function 
    } 
} 

signup(function(ok) { 
    if (ok) alert('Ok!'); 
    else alert('Not ok!'); 
}); 
+0

很好解释! –

2

在代码运行完成之前,您正在提醒变量。使用一个成功函数,而不是来自AJAX调用,当返回值时,您可以使用它。

此刻,你是不是等待AJAX​​调用来完成,你继续你的代码这就是为什么你越来越不确定

+0

这是不正确的,因为如果我尝试注册已经使用的用户名,我会得到警报('已接受用户名,请选择另一个');如果块设置为与设置注册变量的块相同,那么它是相同的? – user550

+0

@ user550,如果你在那一刻提醒注册? –

+0

我得到了一个未定义 – user550