Ok, donc ce titre n'explique probablement pas bien ma question. J'espère que cela a du sens. C'est aussi ma première application avec jQuery, alors pardonnez-moi si je fais quelque chose de stupide.
J'ai la fonction suivante:
function getRandomImages(limit) {
imagesArray = new Array();
$.getJSON('createImageArray.php', {limit: limit}, function(data) {
$.each(data, function(i) {
imagesArray[i] = data[i]; //imagesArray is declared globally.
});
});
}
Le getJSON est correctement l'objet à détourner JSON. Elle retourne quelque chose comme ceci:
{"image0":"images/19.10.FBB9.jpg","image1":"images/8.16.94070.jpg","image2":"images/8.14.47683.jpg","image3":"images/8.15.99404.jpg","image4":"images/8.13.20680.jpg","image5":"images/21.12.9A.jpg","image6":"images/8.17.75303.jpg"}
J'étais débogage et je suis confiant que les données [i] correctement contient le chemin d'image saisi de l'objet JSON. Cependant, après l'appel de getRandomImages(), je regarde mon global imagesArray et remarque que rien n'a été changé. Je suppose qu'il est en train de créer une copie du fichier imagesArray au lieu d'en saisir une. Est-ce que quelqu'un peut me dire ce que je dois faire pour que mon global imagesArray soit mis à jour dans le bloc $ .each? Ai-je besoin de passer en imagesArray par référence en quelque sorte? Désolé, je suis un peu perdu.
Merci pour l'aide.
EDIT: Informations générales. Je remplis un tableau d'emplacements d'images aléatoires de la base de données. Je ne veux pas charger toutes les images de la base de données dans un tableau à la fois, car il y en a trop. Donc, j'ai un compteur qui garde la trace de l'endroit où je suis dans mon tableau d'image. Une fois que j'ai terminé avec une image, je déplace le pointeur vers l'image suivante. Si j'atteins la fin, j'ai besoin de saisir des images plus aléatoires. C'est là que la fonction js ci-dessus est appelée; il appelle createImageArray.php qui saisit x images aléatoires de la base de données et renvoie un tableau. Je veux ensuite stocker ces emplacements d'images dans mon global imagesArray.
Je ne sais pas comment je pourrais restructurer mon code pour prendre en compte la nature asynchronouos de .getJSON.
Je crois qu'il est synchrone, puisque la fonction est déclarée comme un rappel en $ .getJSON() – defrex
Il est appelé de manière asynchrone. A partir de la documentation (http://docs.jquery.com/Ajax/jQuery.getJSON): "Remarque: Gardez à l'esprit que les lignes après cette fonction seront exécutées avant le rappel" –
@kgiannakakis: Hrm, je ne suis pas sûr comment je ferais de la restructuration. Y a-t-il un moyen de le faire se synchroniser? Quel est le raisonnement derrière ne pas recommander cela? Avez-vous des recommandations sur la façon dont je pourrais restructurer? – bryan