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

JavaScript Discussion :

Récupérer un JSON issu d'un appel AJAX


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 141
    Points : 78
    Points
    78
    Par défaut Récupérer un JSON issu d'un appel AJAX
    Bonjour,

    Voila mon questionnement. Je fonctionne par un système de modules et notamment le module Utilisateur, qui identifie un utilisateur de mon application.

    Ma classe User :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    class User {
        constructor({
            user=''
        }){
            this._user = user
        }
     
        getProfile(){
            const API_AUTH = '*******'
            const user = parseInt(this._user);
     
            return $.ajax({
                url: API_AUTH + 'user/'+ user,
                dataType:'json',
                type:'GET'
            })
        }
     
        setProfile(){
     
            var req = this.getProfile().done(this.returnData);
     
            console.log(req);
            return req;
        }
     
        returnData(data){
            var resultat = data;
            return resultat;
        }
     
    }
    Quand je demande une instance de classe dans un autre fichier, comme ci-dessous, je me retrouve non pas avec une response JSON mais avec toute une série de prototypes dont done, then et responseJSON.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {readyState: 1, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ,*…}
    Quand je fais un console.log de data.responseJSON, cela me renvoie undefined alors que le prototype est bien présent. En gros je ne peux pas descendre dans l'arborescence.

    Le but ultime est qu'un développeur qui souhaite développer une application en utilisant ce module, il n'ai qu'à écrire le code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var user = new User({
        user:user_id
    })
     
    var data = user.setProfile();
     
    // et pas user.setProfile().done etc...
    Il est évident qu'il y a un truc que je ne fais pas bien mais je ne sais pas trop quoi....

    Merci pour votre aide

    Sylvain

  2. #2
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 341
    Points : 491
    Points
    491
    Par défaut
    Le problème que vous rencontrez vient du fait que vous essayez de traiter une réponse asynchrone de manière synchrone. L'appel AJAX est asynchrone par nature, et vous devez gérer la réponse de manière appropriée en utilisant des promesses ou des async/await.


    Code javascript : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    class User {
        constructor({ user = '' }) {
            this._user = user;
            this.API_AUTH = '*******'; // Assurez-vous de remplacer '*******' par l'URL réelle de votre API
        }
     
        async getProfile() {
            const user = parseInt(this._user);
            const response = await $.ajax({
                url: `${this.API_AUTH}user/${user}`,
                dataType: 'json',
                type: 'GET'
            });
            return response;
        }
     
        async setProfile() {
            try {
                const data = await this.getProfile();
                console.log(data);
                return data;
            } catch (error) {
                console.error('Error fetching profile:', error);
                throw error;
            }
        }
    }
     
    // Utilisation de la classe User
    async function main() {
        var user = new User({ user: user_id });
     
        try {
            var data = await user.setProfile();
            console.log(data); // Traitez vos données ici
        } catch (error) {
            console.error('Failed to set profile:', error);
        }
    }
     
    main();

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    En fait j'étais pas loin, mais je faisais la demande en synchrone et pas en asynchrone.

    Merci en tout cas.

    Sylvain

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

Discussions similaires

  1. Appel ajax/ Datatable/Erreur JSON
    Par Pepito39 dans le forum AJAX
    Réponses: 2
    Dernier message: 10/02/2017, 09h10
  2. [DOM] Charger un document XML issu d'un appel AJAX
    Par Land3r dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 26/08/2011, 19h58
  3. [Dojo] Simple data grid sans appel Ajax
    Par Den's dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 14/12/2006, 08h23
  4. [AJAX] appel Ajax DOM
    Par MALAGASY dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/09/2006, 13h16
  5. [AJAX] Effectuer plusieur appel ajax
    Par shwin dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/10/2005, 16h40

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