Salut à tous. J'ai, ce qui semble être, un problème trivial. J'ai le code JavaScript suivant:jQuery: Attendez que la fonction soit terminée pour continuer le traitement?
$(function() {
var r = GetResults();
for(var i = 0; i < r.length; i++) {
// Do stuff with r
}
});
function GetResults() {
$.getJSON("/controller/method/", null, function(data) {
return data;
});
}
En raison du fait que j'appelle une méthode de manière asynchrone, le script continue à exécuter et quand il rencontre la boucle, r
est évidemment pas avoir encore une valeur. Ma question est la suivante: quand j'ai une méthode qui fait une opération asynchrone, et je suis dépendant des données qu'elle retourne dans le bloc principal, comment puis-je arrêter l'exécution jusqu'à ce que les données soient retournées? Quelque chose comme:
var r = GetResults(param, function() {
});
où la fonction est une fonction de rappel. Je ne peux pas déplacer le traitement pour la boucle dans la fonction de rappel de la demande JSON parce que je réutilise la fonctionnalité de GetResults plusieurs fois dans la page, sauf si je veux dupliquer le code. Des idées?
Merci pour la réponse. La raison pour laquelle j'ai séparé GetResults est que je réutilise cette fonctionnalité plusieurs fois sur la page. Je devrais éditer mon post pour le dire. – user135383
Si vous devez effectuer le même traitement sur des données provenant de plusieurs endroits, il suffit de remplacer votre fonction de rappel par une fonction nommée et d'y effectuer le traitement. $ .getJSON ("/ controller/méthode /", null, processData (données)); function processData (d) {...} –