Problème de return d'une fonction [Résolu] - HTML/CSS - Programmation
Marsh Posté le 11-06-2007 à 16:51:34
Code :
|
ça risque pas de marcher,
Marsh Posté le 11-06-2007 à 17:03:59
Oui bon hein ^^ De toute façon là n'est pas le problème
J'ai trouvé le problème, apparement c'est la portée des variables. En fait le
Code :
|
se trouve dans une fonction appelée en cas de changement de statut de ma requete AJAX.
Donc le return doit d'abord être interpreté dans la fonction xxx(), puis transmis à yyy().
Jvais voir tout ça -_-
Marsh Posté le 11-06-2007 à 17:45:00
/!\ Pas résolu /!\
Ok donc mon problème vient de là:
Code :
|
La variable test que je déclare dans ma fonction function() pour le onreadystatechange, est pourtant bien déclarée comme une variable globale (il me semble... non ?)
Ah lala, le PHP c'est tellement plus simple...
Marsh Posté le 12-06-2007 à 08:15:52
test est pas un mot réservé en javascript ?
Il me semblait avoir lu ça quelque part sur ce forum ???
Marsh Posté le 12-06-2007 à 08:50:38
même s'il est toléré, ta variable test à une portée locale à ton handler onreadystatechange de l'objet xhr ( qui doit lui être déclaré dans le namespace global je suppose... ça sent bon le paté.).
Donc déclare ta variable test dans checkAccount plutot que dans le handler:
Code :
|
Marsh Posté le 12-06-2007 à 13:03:49
Non. En javascript toute variable non déclarée dans une fonction via le mot clé "var" est d'office globale, indépendement de la fonction où elle est utilisée. Ici test est globale (et str et xhr doivent l'ètre aussi, sinon ça marchera pas bien...).
Marsh Posté le 12-06-2007 à 13:09:30
Si je comprends bien le problème est que test est undefined quand tu l'affiches ? Ca ne me semble pas anormal vu les tests que tu fais... Ou alors j'ai pas compris.
Marsh Posté le 12-06-2007 à 13:09:48
Button back attacks again :: sorry
Marsh Posté le 12-06-2007 à 13:45:15
bignose a écrit : Non. En javascript toute variable non déclarée dans une fonction via le mot clé "var" est d'office globale, indépendement de la fonction où elle est utilisée. Ici test est globale (et str et xhr doivent l'ètre aussi, sinon ça marchera pas bien...). |
O'RLY???
Sauf que là, son appel via xhr est asynchrone et le alert(test) a lieu avant que le onreadystatechange ait lieu.
Test est donc pas encore déclaré dans le scope global au moment du alert
Marsh Posté le 12-06-2007 à 16:18:11
Bon, le truc marrant, c'est que je capte rien à ce que vous dites.
Reprenons avec ma fonction:
Code :
|
J'ai vraiment du mal avec toutes ces définitions (handler, scope, ce que ça change au niveau de ma variable si le mode est asynchrone ou pas, etc...), si quelqu'un pouvait m'expliquer en 2-3 lignes (et si possible sans me renvoyer vers des liens qui dont pas vraiment ciblés sur mon cas) ça serait super
Ensuite, un truc que je comprends pas, si une variable est définie par le mot clé "var", il parait qu'elle est donc accessible partout dans n'importe quelle fonction, or si je crée une fonction X() dans laquelle je défini la variable "abc" avec "var abc = "coucou";", ma fonction checkAccount ci-dessus me renverra un Undefined si je lui demande de me l'afficher...
Marsh Posté le 12-06-2007 à 16:58:21
grosso modo comment marche un xhr ( xmlHttpRequest).
Il "appelle" le serveur et quand le serveur lui réponds la fonction définie dans le onreadystatechange est executée.
Le temps entre l'appel et l'execution de la fonction peut varier, mais il n'est "jamais" instantané.
Par défaut, le xhr est "asynchrone" c'est à dire que le traitement n'est pas "bloquant" pour le reste.
Dans ton cas, test n'est déclaré que dans la fonction "onreadystatechange" avant cela cette variable n'a aucune valeur.
Tu fais ton appel serveur et tout de suite après tu fais ton alert de ta valeur test.
Le retour du serveur n'ayant pas encore eu lieu, la fonction dans le onreadystate n'a pas été éxécutée et la variable test n'est pas encore définie. Bilan: tu as le droit à une belle erreur.
Marsh Posté le 12-06-2007 à 17:05:40
Merci pour les précisions anapajari
En fait, je déclarai mes variables dans une fonction (elle étaient donc locales), et j'apellais une fonction (dans cette fonction) en transmettant les variables en paramètres. En gros il suffisait que je déclare toutes mes variables en début de script (pour qu'elles soient globales) et que je les récupères dans les fonctions, sans besoin d'indiquer de paramètres.
Désolé, ça m'apprendra à pas lire les tutos quand je débute un language
Bonne journée !
Kmeleon
Marsh Posté le 12-06-2007 à 17:06:35
a pour ton probleme de compréhension de la portée des variables, la doc est pas mal faite: http://developer.mozilla.org/fr/do [...] e_variable
Marsh Posté le 11-06-2007 à 16:25:55
Salut à tous !
Voilà je développe un petit javascript avec du AJAX, et j'ai un problème au niveau du return d'une fonction:
Pour faire court:
Le "Etape 1" s'affiche (donc normalement il devrait retourner 1), seulement le "Ca marche ne s'affiche pas".
Que se passe-t-il (je suis débutant ) ?
Bonne journée
Kmeleon
Message édité par kmeleon1 le 12-06-2007 à 17:06:18