Retour tableau de d3.json ()
Comme JQUERY/d3-noob, il semble que je ne peut pas comprendre comment faire ce travail:
supdog = d3.json(dataPath, function(jsondata){
return jsondata;
})
console.log(supdog);
Merci d'avance.
source d'informationauteur Comfort Eagle
Vous devez vous connecter pour publier un commentaire.
Outre le fait que la description du problème est très laconique, le problème semble être de vos hypothèses sur ce qui est de revenir ce qui.
La fonction d3.json() est asynchrone fonction qui renvoie directement (avec une valeur non définie, je suppose). Seulement lors de la réception des données depuis le backend, la fonction de rappel passée à il sera appelé. Évidemment, le contexte est différent ici et la valeur de retour de votre rappel deviennent pas automatiquement la valeur de retour de d3.json (comme celui-ci est retourné "long" avant déjà).
Ce que vous voulez faire est probablement quelque chose comme:
Mise à jour 1:
Évidemment, l'exemple ci-dessus n'est pas encore tout à fait correcte. L'appel à la console.log() est effectué directement après la d3.json() a retourné. Ainsi, le serveur peut ne pas avoir envoyé la réponse encore. Par conséquent, vous ne pouvez accéder à des données lorsque le rappel est retourné. Fixe exemple:
Pour une (un peu stupide, mais bon) exemple de travail voir: http://jsfiddle.net/GhpBt/10/
Mise à jour 2:
L'exemple ci-dessus montre l'ordre dans lequel le code est exécuté, mais ne méritent pas vraiment un prix pour le plus beau code. J'ai moi-même de ne pas utiliser ce "mondial" de la variable et de simplifier l'exemple ci-dessus:
Remarque comment doSomethingWithData est passé directement à la d3.json au lieu de l'appeler séparément dans une anonyme intérieur de la fonction.
Remarque: Ce n'est pas un problème particulier de d3.js. Fondamentalement, toutes les fonctions javascript sont asynchrones sont susceptibles de se comporter de façon similaire. Si elle retourne quelque chose, il ne sera pas la valeur de retour de la fonction de rappel.
Je suis conscient que c'est un très vieux post, mais j'ai été confronté à un problème similaire récemment, et a trouvé la solution suivante, qui pourrait le partage de la valeur:
Dans mon cas, le fichier JSON de la syntaxe a été brisé. Par défaut, aucune erreur n'apparaîtra dans le navigateur dans ce cas, à moins que vous améliorer la fonction suggéré par @BertjanBroeksema avec errorhandling. Quelque chose comme ceci:
De cette façon, vous pouvez voir si il y avait quelque chose de mal avec le traitement du fichier JSON.