J'aimerais utiliser une variable (tableau) d'une autre fonction. Je l'ai déjà défini dans la portée globale, mais cela ne fonctionne pas ..
Voici mon code pour une meilleure compréhension: P>
var globalData = ''; var data = ''; $.getJSON('https://...' + data[x].id + '.json', function(data) { globalData = data; data = globalData.name; console.log(data); // works just fine if (condition === 1) { function2(); // calls this function } else { function3(); } }); function function2() { console.log(data); // just an empty line console.log(globalData); // UPDATE: works just fine }
3 Réponses :
Le problème est que vous avez deux variables avec nom données code> est locale pour rappeler et d'autres sont globales. Ainsi, lorsque la ligne suivante
var globalData = '';
var data2 = '';
$.getJSON('https://...' + data[x].id + '.json', function(data) {
globalData = data;
data2 = globalData.name;
console.log(data2); // works just fine
if (condition === 1) {
function2(); // calls this function
} else {
function3();
}
});
function function2() {
console.log(data2); // just an empty line
}
Le problème est que la variable data code> est shadlé dans la fonction de rappel.
function(data) {
globalData = data;
data = globalData.name;
console.log(data); // works just fine
...
Vous utilisez le même nom de variable pour deux choses différentes. Vous avez une variable nommée data code> dans votre portée globale et le paramètre
getjson code> Callback Le paramètre a également un paramètre appelé
DATA code> qui masque les données
code> variable globale. En outre, à l'intérieur de ce rappel, vous modifiez la variable code> data code>. Si vous avez l'intention de modifier le paramètre CODE> DATA CODE> PASSED AS, Ceci n'est pas une bonne pratique. P>
Bien que ma première pensée était que c'était une question d'asynchronisation, je ne vois pas que c'est -
fonction2 code> est vraiment appelé à l'intérieur du rappel. Je pense que le problème est dû à l'observation de la variable code> de données code>
@Tony - L'OP appelle la fonction dans le rappel.
@Robinzigmond merci pour votre réponse. Comment puis-je résoudre ceci dans mon exemple?
Ce n'est pas un problème asynchrone. Je vais me revenir et répondre à la question pour vous.
@ Tommaximilianmüller Voir la réponse donnée par Maaer ci-dessous - comme je l'ai dit, c'est juste une question de dénomination.
@RandyCasSburn Merci beaucoup! Je vous donnerais un uppote si je pouvais :).
fonction (données) { code> <- data! = Données globales .... Même nom de variable, donc pourquoi les différents nom de variable fonctionnent.
@Randycasburn Une autre question :). J'ai passé des données à la fonction comme ceci:
fonction2 (données) code> et n'a peut-être pas accès si je faisais
fonction de fonction2 (données) {...} code>. C'est la bonne route?
J'ai voté pour rouvrir - mais cela ne reçoit pas la réponse dont ils ont besoin.
Je n'ai aucune idée de ce que cela signifie ou pourquoi c'est le cas sans code. S'il vous plaît ouvrir une question différente.
Fwiw Je jette un vote étroit comme "trop large", comme je ne peux pas signaler comme une dupe de l'autre question. Le fait que vous ne puissiez pas fournir une réponse à l'autre question est hors de propos - vous devez attendre que cela soit (potentiellement) rouvert.
C'est votre prérogative. Merci d'avoir pris le temps d'expliquer votre position.