Je cherche à utiliser dans ma fonction un tableau que je récupère dans ma base de données. Ajax étant asynchrone, il n'est pas possible de l'exploiter dans mon code sans faire de callback, await ou then(). Ne connaissant pas du tout ajax, j'ai un peu du mal à contourner l'asynchrone de la fonction. J'ai vu qu'il était possible d'exploiter ma valeur avec un callback, en mettant tout mon code dans un celui-ci. Cependant je trouve cette solution un peu brouillon visuellement parce que j'ai plusieurs fonctions qui doivent exploiter cette valeur.
Pour illustrer mes propos : voici le code sans ajax :
var availableQuestions = [];
function setAvailableQuestions(){
//met toutes les variables locales dans availableQuestions
}
function getNewQuestion(){
//récupère une question au hasard de availableQuestions
}
function getInput(){
//récupère l'input de l'utilisateur et compare avec la réponse
}
... et plein d'autres questions qui ont besoin de availableQuestions
Maintenant mon but est de récupérer la valeur de ma base de données avec Ajax. Pour le moment j'ai :
function setAvailableQuestions(){
var ajax = new XMLHttpRequest();
var asynchronous = true;
ajax.open("GET","../controller.php?func=get_availableQuestion", asynchronous);
ajax.send();
ajax.onreadystatechange = function(){
var allQuestions = JSON.parse(this.response);
return allQuestions;
}
}
Cependant comme mentionné plus haut, du fait que c'est asynchrone il n'est pas possible de récupérer la valeur pour l'exploiter dans les autres fonctions.
D'où mon besoin de récupérer la valeur en callback, si possible je ne souhaite pas créer une fonction englobant toutes mes autres puisque j'en ai au moins une dizaine qui est dépendante de setAvailableQuestions. Je parle de callback parce que j'ai vu que c'est la solution la plus utilisé pour ce genre de cas, cependant si vous pensez que promise ou await conviendrait mieux dans mon cas je suis tout ouïe
Quelqu'un aurait-il une solution ? Merci d'avance
- Edité par chubbymarschmallow 8 juin 2022 à 11:08:38
dans le callback tu appelles une fonction init() par exemple, dans laquelle tu fais les appels à getInput etc. Tu mets "allQuestions" en dehors de la fonction pour qu'elle soit globale.
ça affichera hello a la fin de la requete ajax (dans le cas ou on entre pas dans le catch que je n'ai pas mis)
et c'est asynchrone aussi
- Edité par zvheer 8 juin 2022 à 15:44:51
yasakani no magatama
Récupérer variable ajax par callback
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
yasakani no magatama
yasakani no magatama