Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer variable ajax par callback

Pour exploiter la variable dans plusieurs autres fonctions

    8 juin 2022 à 10:57:41

    Bonjour à tous, 

    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

    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2022 à 11:18:17

      bonjour il te suffit d'appeler ta première fonction avec le retour de ta requete

      -
      Edité par zvheer 8 juin 2022 à 11:24:08

      • Partager sur Facebook
      • Partager sur Twitter

      yasakani no magatama

        8 juin 2022 à 11:20:19

        Salut,

        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.

        • Partager sur Facebook
        • Partager sur Twitter
          8 juin 2022 à 11:42:10

          Bonjour, merci pour vos réponses !

          Malheureusement @zvheer comme c'est asynchrone, seulement appeler la fonction ne marche pas

          @Arthur222 Ça a marché pour getNewQuestions(), je vais essayer de creuser la piste merci

          • Partager sur Facebook
          • Partager sur Twitter
            8 juin 2022 à 15:41:23

            chubbymarschmallow a écrit:

            Bonjour, merci pour vos réponses !

            Malheureusement @zvheer comme c'est asynchrone, seulement appeler la fonction ne marche pas

            @Arthur222 Ça a marché pour getNewQuestions(), je vais essayer de creuser la piste merci


            Asynchrone ou non l'appel à la fonction marchera toujours normalement 

            ça dependra simplement de où la fonction est mise et de où elle est appelée

            const say_hello = () => {

            alert('hello') 

            }

            fetch('url_ajax').then(response => response.json()).then(response => say_hello() )

            ç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

            • Partager sur Facebook
            • Partager sur Twitter

            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.
            • Editeur
            • Markdown