2010-05-25 11 views
1

Je ne comprends pas pourquoi je ne reçois pas le message que "nom d'utilisateur existe déjà" si tapez le nom d'utilisateur qui est déjà dans la base de données.problème dans les variables dans jquery

Si le nom d'utilisateur dans un serveur, alors il renvoie la valeur "1" autrement vide, et malgré de réussir à obtenir la valeur du serveur basé sur le nom d'utilisateur est présent ou non, et assignant la valeur à la variable "x ", Je suis incapable d'obtenir le message quand je passe déjà le nom d'utilisateur. Puis-je savoir?

$(document).ready(pageInit); 
function pageInit() { 
$('#1').bind('blur',go); 
} 
function go() { 
var value = $('#1').val(); 
var x = 0; 
$.post('just.do',{username:value},function(data){ 
    x = data; 

    } 
); 

if(x) { 
     $('#para').show(); 
     $('#para').html("Username already exits"); 
     return false; 
    } 
else { 
    $('#para').hide(); 
     return true; 
    } 
}; 

EDIT: Voici ce que je fais dans la demande de poste à servlets:

String user1 = request.getParameter("username"); 
    if(user != null) { 
     String query = "Select * from users where user_name="+"\""+user+"\""; 
     b = db.doExecuteQuery(stmt,query); 
     if(b) { 
      out.write("1"); 
     } 

}

+0

vous devriez poster votre code de côté de serveur aussi –

Répondre

4

Votre code if(x) ... exécute avant la requête HTTP se termine, et par conséquent , x ne sera jamais défini lorsque cette partie du code est atteinte.

Vous voulez utiliser callbacks:

$.post('just.do',{username:value},function(data) { 
    receivedResult(data); 
}); 

... 

function receivedResult(x) { 
    if(x) { 
    ... 
    } else { 
    ... 
    } 
} 
+0

Merci pour votre réponse. – Alvin

2

Vous devez réorganiser votre fonction go() un peu, comme ceci:

function go() { 
    $.post('just.do',{username: $('#1').val()},function(data){ 
    if(data) { 
     $('#para').show(); 
     $('#para').html("Username already exits"); 
     return false; 
    } else { 
     $('#para').hide(); 
     return true; 
    } 
    }); 
} 

$.post() est une opération asynchrone, de sorte que x=data se passait après votre if(x) a couru ... vous devez réorganiser un peu de sorte qu'il se produise après que la réponse revienne, par exemple en cours d'exécution ou déclenché à l'intérieur du rappel comme je l'ai ci-dessus.