2010-02-08 4 views
0

j'ai cette fonctionfonction jquery ne renvoie pas correctement les valeurs

$.fn.validate.checkValidationName = function(id) { 
$.post("PHP/submitButtonName.php", {checkValidation: id}, 
    function(data) { 
    if(data.returnValue === true) { 
     name = true; 
    } else { 
     name = false; 
    } 
    **console.log("name = "+name); **//this prints out "true"**** 
}, "json"); 
}; 

et cette fonction .cliquez qu'il appelle. Toutes les variables sont déclarées en dehors de cette fonction de sorte qu'elles doivent être accessibles par d'autres fonctions

$('.submitBtn').click(function() { 
//clears the array before re-submitting the click function 
nameValues = []; 
usernameValues = []; 
emailValues = []; 
name = false; 
username = false; 
email = false; 

//for each of the input tags 
$("input").each(function() { 

     //if the curent input tag has the class .name, .userpass, or .email 
    if(($(this).hasClass("name"))) { 
     nameValues.push($(this).val()); 
    } else if(($(this).hasClass("userpass"))) { 
     usernameValues.push($(this).val()); 
    } else if(($(this).hasClass("email"))) { 
     emailValues.push($(this).val()); 
    } 

}); 
//call the checkValidation function with the array "values" 
$.fn.validate.checkValidationName(nameValues); 
$.fn.validate.checkValidationUsername(usernameValues); 
$.fn.validate.checkValidationEmail(emailValues); 

console.log("name = "+name); //but this prints out "false" 
console.log("username = "+username); 
console.log("email = "+email); 

if((name === "true") && (username === "true") && (email === "true")) { 
    alert("Everything checks out great"); 
} else { 
    alert("You missed one!"); 
} 
}); 

Lorsque je clique sur le lien pour déclencher la première fonction, elle renvoie la valeur « true » dans la fonction, mais quand je console.log("name"+name); dans la fonction .click après l'appel de la fonction, il imprime false.

Pourquoi est-ce? Dois-je retourner quelque chose de la fonction checkValidatoinName?

Répondre

2

$.post est asynchrone, ce qui signifie qu'il n'attendra pas le résultat avant de continuer. Vous commencez probablement à truetrue quelque part, et il obtient true la première fois, mais tous les autres fois, il est false, parce que l'AJAX du premier a fini et l'a mis à false.

Essayez d'utiliser $.ajax au lieu de $.post et mis async-false dans les options. Le $.post documentation affiche les options que $.post donnerait à $.ajax.

+0

Alors, comment puis-je résoudre ce problème? Puis-je faire en sorte que ma fonction .click s'exécute et immédiatement après qu'une autre fonction soit exécutée? – Catfish

+0

J'ai édité ma réponse pour montrer comment rendre la requête AJAX synchrone plutôt qu'asynchrone. – icktoofay

+0

Essayé en utilisant $ .ajax avec async: false. ne fait toujours pas l'affaire. – Catfish

Questions connexes