IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Récupérer les données de la requête AJAX


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Points : 19
    Points
    19
    Par défaut Récupérer les données de la requête AJAX
    Bonjour à toutes et à tous,

    Je viens vous poser une question qui est certainement terriblement basique, mais je ne parviens à trouver la solution et ça me rend bientôt fou.

    J'aimerai créer une fonction JS dans laquelle s'exécute une requête AJAX visant à récupérer des données que je veux utiliser par la suite.

    J'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function ajaxBase(cible) {
        const xhr = new XMLHttpRequest();
        xhr.open("get", `${cible}`, true);
        xhr.send();
        xhr.onload = function () {
            if (this.status === 200) {
                const data = JSON.parse(this.responseText);
                return data;
            }
        };
    }
    J'aimerai pouvoir faire appel à ma fonction "ajaxBase()" dans ma page JS pour récupérer les données et les gérer ensuite comme bon me semble en écrivant qqch comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const donneesRecues = ajaxBase('page.txt');
    Sauf que je n'y arrive pas. Le "return data" de ma fonction callback ne m'est pas retourné et ma variable "const donneesRecues" reste donc désespérément "undefined". La solution est certainement évidente, mais elle m'échappe. Je sais que le "return data;" ne fonctionne pas car il est au sein de la fonction callback, mais lorsque je le place hors de celle-ci, la variable "data" n'est plus dans la portée et n'existe pas.

    Merci d'avance si vous êtes en mesure de m'aider.

    Thufir Hawat

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    Au temps pour moi,

    Personne ne m'a encore répondu jusque-là et tant mieux car j'ai trouvé la solution à mon problème.

    Il suffit de faire appel aux promesses et à Async Await :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function ajaxBase(cible) {
        return new Promise(function (resolve) {
            const xhr = new XMLHttpRequest();
            xhr.open("get", `${cible}`, true);
            xhr.send();
            xhr.onload = function () {
                if (this.status === 200) {
                    const data = JSON.parse(this.responseText);
                    resolve(data);
                }
            };
        })
     
    }
    Et ensuite, d'utiliser le bout de code ci-dessous au sein d'une fonction "Async" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const donneesRecues = await ajaxBase('page.txt');
    Merci à ceux qui m'ont lu et ont peut-être hésité à me répondre. Un peu de patience et de réflexions m'ont finalement permis de m'en sortir.

    Thufir Hawat

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 102
    Points : 44 865
    Points
    44 865
    Par défaut
    Bonjour,
    pourquoi s'e$$3@£.er avec une Promise en wait comme tu utilises un objet XMLHttpRequest().

    Il te suffit de rendre synchrone ta requête, la réponse sera ainsi disponible dans la continuité de ton script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ajaxBase(cible) {
        const xhr = new XMLHttpRequest();
        xhr.open("get", `${cible}`, false);
        xhr.send();
        return JSON.parse(xhr.responseText);
    }
    Ce n'est effectivement pas recommandé car il y a bocage du script en attendant la réponse mai spas moins pire qu'avec un wait.

    Ce qui se fait « traditionnellement », en respectant l’asynchrone, est de passer une fonction, dite callback, en paramètre, fonction de traitement à exécuter lorsque le serveur répond.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function ajaxBase(cible, fctCallBack) {
        const xhr = new XMLHttpRequest();
        xhr.open("get", `${cible}`, true);
        xhr.send();
        xhr.onload = function() {
            if (this.status === 200) {
                // appel de la fonction de traitement
                fctCallBack(JSON.parse(this.responseText));
            }
        };
    }
    Tu pourrais également regarder du côté de l'API Fetch qui est une façon un peu plus « moderne » de voir les choses pour peu que tu n'ai pas à supporter IE.

    Personne ne m'a encore répondu jusque-là
    et oui les intervenants sur les forums le font sur leur temps de libre et sont rarement assis devant leur écran en attendant une discussion à laquelle ils peuvent réponde

    et tant mieux car j'ai trouvé la solution à mon problème.
    Tu vois que cela à du bon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. autocomplete() récupérer les données de la requête
    Par ludovic44 dans le forum jQuery
    Réponses: 8
    Dernier message: 05/02/2018, 16h40
  2. Exploiter les données d'une requête Ajax
    Par mohamed lamine 1996 dans le forum AJAX
    Réponses: 3
    Dernier message: 22/11/2017, 22h34
  3. Réponses: 0
    Dernier message: 20/05/2015, 15h15
  4. [MySQL] Récupérer les données d'une requête
    Par steinfield dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/06/2007, 13h43
  5. Réponses: 5
    Dernier message: 07/09/2006, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo