2013-07-06 4 views
1

J'ai une fonction jQuery qui utilise Ajax. Il retourne toujours undefined et je peux comprendre pourquoi.Fonction jQuery avec Ajax renvoyant undefined

Je remarque que si j'alerte la variable enregistrée dans la fonction $.post cela fonctionne, mais pas si je l'essaie dehors.

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; 
} 

Répondre

3

Lorsque vous traitez avec des opérations asynchrones comme AJAX, il est recommandé d'utiliser le rappel les fonctions. Par exemple:

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

Bien expliqué! –

2

Vous alertez la variable avant l'exécution du code. Utilisez une fonction sur succès à la place d'un appel AJAX qui, lorsque la valeur est retournée, vous pouvez l'utiliser.

À l'heure actuelle, vous attendez pas pour l'appel AJAX pour terminer, vous poursuivez votre code qui est pourquoi vous obtenez undefined

+0

Ce qui ne peut pas être vrai parce que si j'essaie d'enregistrer un nom d'utilisateur qui est déjà pris, je reçois une alerte ('nom d'utilisateur pris, veuillez en choisir un autre'); qui est dans le même bloc que celui qui définit la variable enregistrée? – user550

+0

@ user550 et si vous alertez 'registered' à ce moment-là? –

+0

Je reçois undefined – user550

Questions connexes