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 :

Class poo : Requête AJAX avec les promises


Sujet :

AJAX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Class poo : Requête AJAX avec les promises
    Bonjour,

    J'ai créé une class et j'aimerais quel me retourne le résultat d'une requête juste en lui passant une URL sauf que je me retrouve avec un Promise{<pending>} en retour. Mais le Promise pending m'indique bien que ma promise est "resolved" et qu'en valeur j'aie bien un objet. Merci d'avance pour ceux qui pourront m'éclairer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const request = new Request("Mon URL");
    const myResponse = request.getRequestWithPromise();
    console.log(myResponse);
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    export class Request{
        constructor(url) {
            this.url = url;
        } 
        getRequestWithPromise() {
            const url = this.url;
            const promise = new Promise(function(resolve, reject) {
                const xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function() {
                    if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
                        resolve(this.response); 
                    }
                };
                xhr.open("GET", url);
                xhr.responseType = "json";
                xhr.send();
            });
            return promise.then(function(value) {
                let object = value;
                return object;
            });
        }   
    }

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    bienvenue dans le monde le l'asynchrone

    Tu n'obtiendra pas le résultat en direct, même en écrivant le code que tu as mis.

    Tu auras en retour quoiqu'il arrive une promise et il suffit de chaîner avec la méthode .then() pour récupérer le résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const request = new Request("Mon URL");
    const myResponse = request.getRequestWithPromise();
    myResponse
      .then((result) => console.log("result :",result))
    avec simplement ta déclaration comme suit :
    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
    getRequestWithPromise() {
      const url = this.url;
      const promise = new Promise(function (resolve, reject) {
        const xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
          if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
            resolve(this.response);
          }
        };
        xhr.open("GET", url);
        xhr.responseType = "json";
        xhr.send();
      });
      return promise;
    }
    Place des console.log() dans ton code pour bien visualiser l'ordre des retours.

    Maintenant tu peux utiliser une fonction de rappel pour t'afficher le résultat
    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
    16
    getRequestWithPromise(callback) {
      const url = this.url;
      const promise = new Promise(function (resolve, reject) {
          const xhr = new XMLHttpRequest();
          xhr.onreadystatechange = function () {
            if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
              resolve(this.response);
            }
          };
          xhr.open("GET", url);
          xhr.responseType = "json";
          xhr.send();
        })
        .then((result) => callback ? callback(result) : console.log("result :", result))
      return promise;
    }
    en ayant définie une fonction comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function fctCallBack (data){
      console.log("data :",data)
    }
    et un appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getRequestWithPromise(fctCallBack);
    ainsi tu pourras traiter tes données dans la fonction fctCallBack.

    L'objet Promise, mais tu as déjà du lire !

    Nota : pour simplifier ton code tu pourrais t’appuyer sur l'API Fetch

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    merci pour ta réponse bien expliqué je comprends mieux.

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

Discussions similaires

  1. [Dojo] Requête AJAX avec paramètre avec DOJO
    Par Tavarez59 dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 19/06/2009, 13h50
  2. [JQuery] Requête ajax avec jQuery
    Par ApheX2 dans le forum jQuery
    Réponses: 3
    Dernier message: 28/08/2008, 22h40
  3. [MooTools] requête ajax avec Mootools
    Par oneTime dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 14/04/2008, 10h50
  4. requêtes SQL avec les arbres algébrique
    Par amazircool dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2007, 00h04
  5. [POO] PHP5 : Problème avec les classes
    Par fleur_de_rose dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2006, 19h09

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