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 :

Conversion ajax to javascript object - this.responseText


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Par défaut Conversion ajax to javascript object - this.responseText
    Bonjour à tous

    J’ai des données que j’utilise pour obtenir des totaux et ainsi alimenter un chart.js .

    Ça marche très bien avec : (voir data: TotalTicketsPerDay)
    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
    function BuildBarChart() {
     
    var ctx = document.getElementById('myChart').getContext('2d');
    DaysInTheMonthString = [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];
     
    const TotalTicketsPerDay = [0,0,0,0,0,0,0,0,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
     
    //…
     
      var chart = new Chart(ctx, {
            // The type of chart we want to create
            type: 'bar',
     
            // The data for our dataset
            data: {
                labels: DaysInTheMonthString,
                datasets: [{
                    label: 'Total tickets open this month',
                    backgroundColor: 'rgb(2, 117, 216)',
                    borderColor: 'rgb(2, 117, 216)',                
                    data: TotalTicketsPerDay
                }]
            },

    Malheureusement j’ai besoin d’utiliser une variable a la place car les résultats vont changer tous les jours.
    Le résultat se trouve dans une variable et se représente comme ceci :
    [0,0,0,0,0,0,0,0,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

    Si j’utilise une variable pour représenter ce string de résultats ça ne marche pas.
    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
    function BuildBarChart(result) {
     
        var ctx = document.getElementById('myChart').getContext('2d');
        DaysInTheMonthString = [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];
     
        var chart = new Chart(ctx, {
            // The type of chart we want to create
            type: 'bar',
     
            // The data for our dataset
            data: {
                labels: DaysInTheMonthString,
                datasets: [{
                    label: 'Total tickets open this month',
                    backgroundColor: 'rgb(2, 117, 216)',
                    borderColor: 'rgb(2, 117, 216)',                
                    data: result
                }]
            },
    Et si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const TotalTicketsPerDay = result ;
    Ça ne marche pas non plus.
    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
    function BuildBarChart(result) {
     
        var ctx = document.getElementById('myChart').getContext('2d');    
        DaysInTheMonthString = [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];
     
     
        const TotalTicketsPerDay = result ;
     
        var chart = new Chart(ctx, {
            // The type of chart we want to create
            type: 'bar',
     
            // The data for our dataset
            data: {
                labels: DaysInTheMonthString,
                datasets: [{
                    label: 'Total tickets open this month',
                    backgroundColor: 'rgb(2, 117, 216)',
                    borderColor: 'rgb(2, 117, 216)',                
                    data: TotalTicketsPerDay
                }]
            },
    Quelqu’un a une idée pour résoudre ce problème ?

    Merci

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Salut,

    je n'ai pas le problème en testant;
    D'où vient result et comment appelles-tu BuildBarChart() ?

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    tu dis 2 fois ça ne marche pas mais tu ne parles pas de message dans la console;

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    [0,0,0,0,0,0,0,0,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] est un Array qui doit être déclaré par un let ou un const soit dans la fonction soit en dehors.

    Reste à savoir si sa forme et son contenu sont compris par la propriété data de Chart

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    ton retour serveur, this.responseText, est une chaîne de caractères alors que Chart.js requière un Array, il te faut donc transformer l'une en l'autre et pour cela il existe JSON.parse().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const dataRetour = JSON.parse(this.responseText);

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Bonjour,
    ton retour serveur, this.responseText, est une chaîne de caractères alors que Chart.js requière un Array, il te faut donc transformer l'une en l'autre et pour cela il existe JSON.parse().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const dataRetour = JSON.parse(this.responseText);
    C'est bien pansé mais je l'avais déjà mis.
    Même problème.

    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
     
    window.onload = function getStatData() {
     
        if (window.location.pathname.startsWith('/index')) {
            // console.log("Javascript Function getStatsData");
            var oReq = new XMLHttpRequest(); // New request object
            oReq.onload = function () {          
                // The actual data is found on this.responseText          
                console.log(this.responseText);
                // STOP ????????????? WTF
                //"[0,0,0,0,0,0,0,0,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]"STOP
                // REMOVE STOP
                obj = JSON.parse(this.responseText.substring(0, jSonLenght - 4));         
                BuildBarChart(obj);
            };
            oReq.open("get", "index.php?action=statscontroller", true);      
            oReq.send();
        } else {
     
        }    
    }
     
    getStatData();
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    function BuildBarChart(result) {
     
        var ctx = document.getElementById('myChart').getContext('2d');
     
        DaysInTheMonthString = [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];
     
        // const TotalTicketsPerDay = [0,0,0,0,0,0,0,0,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
     
        const TotalTicketsPerDay = JSON.parse(result);
     
        var chart = new Chart(ctx, {
            // The type of chart we want to create
            type: 'bar',
     
            // The data for our dataset
            data: {
                labels: DaysInTheMonthString,
                datasets: [{
                    label: 'Total tickets this month',
                    backgroundColor: 'rgb(2, 117, 216)',
                    borderColor: 'rgb(2, 117, 216)',
                    data: TotalTicketsPerDay
                }]
            },
     
            // Configuration options go here
            options: {
                maintainAspectRatio: false,
                layout: {
                    padding: {
                        left: 0,
                        right: 15,
                        top: 25,
                        bottom: 0
                    }
                },
                scales: {
                    xAxes: [{
                        time: {
                            unit: ''
                        },
                        gridLines: {
                            display: true,
                            drawBorder: false
                        },
                        ticks: {
                            maxTicksLimit: 31
                        },
                        maxBarThickness: 5,
                    }],
                    yAxes: [{
                        ticks: {
                            min: 0,
                            max: 5,
                            maxTicksLimit: 5,
                            padding: 1,
                            // Include a dollar sign in the ticks
                            callback: function (value, index, values) {
                                return number_format(value);
                            }
                        },
                        gridLines: {
                            color: "rgb(234, 236, 244)",
                            zeroLineColor: "rgb(234, 236, 244)",
                            drawBorder: false,
                            borderDash: [2],
                            zeroLineBorderDash: [2]
                        }
                    }],
                },
                legend: {
                    display: true
                },
                tooltips: {
                    titleMarginBottom: 10,
                    titleFontColor: '#6e707e',
                    titleFontSize: 14,
                    backgroundColor: "rgb(255,255,255)",
                    bodyFontColor: "#858796",
                    borderColor: '#dddfeb',
                    borderWidth: 1,
                    xPadding: 15,
                    yPadding: 15,
                    displayColors: false,
                    caretPadding: 10,
                    callbacks: {
                        label: function (tooltipItem, chart) {
                            var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || '';
                            return datasetLabel + ": " + number_format(tooltipItem.yLabel);
                        }
                    }
                },
            }
        });
    }

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Tu fais appel à JSON.parse 2 fois pour la même donnée?

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Par défaut
    J'ai peutêtre du mal a vous expliquer mon problème et je vous en demande pardon.
    Je vais réecrir mon message principal afin de mieu expliquer le problème ou de mieu le décrir.

    Merci a tous

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

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. Problème de conversion de java.util.Date Object to a java.sql.Date Object
    Par amine1980 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/12/2011, 11h18
  3. Réponses: 1
    Dernier message: 15/05/2006, 22h22
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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