Syntaxe jQuery

ViPHP
fab
ViPHP | 2657 Messages

22 oct. 2009, 20:53

j'ai une fonction checkUsername qui fait un appel en Ajax et j'aimerais que cette fonction retourne true ou false pour l'utiliser ailleurs dans mon code js

Code : Tout sélectionner

function checkUsername(s) { $.ajax({ type: "POST", url: 'http://'+ CURRENT_DOMAIN + '/ajax/checkUsernameExists/username/'+s, async: false, success: function(msg){ if(msg=='true'){ return true; } else { return false; } } }); }
Bon seul problème c'est que le return agit pas sur la fonction "mère" si je déclare une variable elle sort pas non plus de la fonction fille, étant assez limité en javascript ... Quelqu'un a une idée?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

22 oct. 2009, 22:02

Joue sur la portée des variables :
[javascript]
function ...
{
var result;
$.ajax({
...
result = (msg == 'true');
...
});

return result;
}[/javascript]

ViPHP
fab
ViPHP | 2657 Messages

22 oct. 2009, 22:09

Et bien merci naho c'est parfait :) par contre tu peux m'expliquer pourquoi en mettant var result ça a marché mais sans ça marchait pas ?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

23 oct. 2009, 10:27

Avant ça ne marchait pas car tu utilisais une fonction anonyme au milieu dans "success: ...". Donc pour que ça marche il aurait fallu que $.ajax retourne la valeur de retour de l'exécution de ladite fonction.
[javascript]$.ajax = function(options) {
........
if (!options.async && everythingWasOK) {
return options.success(response);
}
.....
}[/javascript]
Mais ce n'est pas le cas :)

Donc tu dois déclarer une variable "au-dessus" du scope de ta fonction anonyme (c'est l'objectif de "var result" avant l'appel à $.ajax), modifier cette variable (qui du point de vue de ta fonction anonyme se comporte comme une variable globale) afin qu'elle porte la valeur que tu souhaites transmettre.
C'est la magie de la transmission des scopes parent et des fonctions anonymes en Javascript :)