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

jQuery Discussion :

Json jquery et highcharts


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut Json jquery et highcharts
    Bonjour.

    Je récupère des données au format Json comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"status":"ok","body":{"1368655200":[20.7],"1371333600":[21.9],"1373925600":[24.5],"1376604000":[24.6],"1379282400":[23.5],"1381874400":[22.1],"1384556400":[20.3],"1387148400":[20.1]},"time_exec":0.023688793182373,"time_server":1388092676}
    Je souhaite maintenant créer un graphique Highcharts en utilisant les données suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"1368655200":[20.7],"1371333600":[21.9],"1373925600":[24.5],"1376604000":[24.6],"1379282400":[23.5],"1381874400":[22.1],"1384556400":[20.3],"1387148400":[20.1]}
    J'ai essayé par 2 méthodes mais je sèche

    1ere Methode:

    Je récupère toutes les informations via Curl mais je sèche pour sélectionner les informations désirées

    2ème méthode:

    j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $(function() {
     
     
      $.getJSON('<?php echo $url ; ?>' , function(data) {
     
            console.log('test');
       });
     
     
    });
    Mais rien dans la console et pas d'erreur et la requête s’exécute.


    Est-ce que je suis sur la bonne piste avec une des 2 méthodes?
    Si oui , pouvez-vous me guider?

  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 112
    Points
    44 112
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var data = {"status":"ok","body":{"1368655200":[20.7],"1371333600":[21.9],"1373925600":[24.5],"1376604000":[24.6],"1379282400":[23.5],"1381874400":[22.1],"1384556400":[20.3],"1387148400":[20.1]},"time_exec":0.023688793182373,"time_server":1388092676};
    console.log( data.status);
    console.log( data.body);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci.

    Par contre pour être utilisable dans highcharts , il faudrait multiplier par 1000 le timestamp.
    Comment procéder?

  4. #4
    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 112
    Points
    44 112
    Par défaut
    il faudrait multiplier par 1000 le timestamp.
    ...rien compris !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Il faudrait multiplier par mille toutes les données en rouge dans le code ci-dessous pour être utilisable dans Highcharts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"1368655200":[20.7],"1371333600":[21.9],"1373925600":[24.5],"1376604000":[24.6],"1379282400":[23.5],"1381874400":[22.1],"1384556400":[20.3],"1387148400":[20.1]}
    Comment procéder?

  6. #6
    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 112
    Points
    44 112
    Par défaut
    La façon de procéder me paraît bizarre et lourd à parier que Highcharts sait le gérer.

    Tu peux néanmoins créer un nouvel objetData et l'initialiser à partir des clé/valeurs de l'objet de départ.

    En reprenant l'exemple ci dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var newData ={};
    for( var i in data.body){
      // ajout de 000 pour simuler la multiplication par 1000
      newData[ i+'000'] = data.body[i];
    }
    console.log( 'AFTER' ,newData);

  7. #7
    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 : 73
    Localisation : Belgique

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

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

    Deux exemples largement perfectibles (line graph et bar graph) pour le fichier JSON du message n° 1. Pour tester, il suffit de copier-coller les codes dans le même dossier.

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {
    	"status" : "ok",
    	"body" : {
    		"1368655200" : [ 20.7 ],
    		"1371333600" : [ 21.9 ],
    		"1373925600" : [ 24.5 ],
    		"1376604000" : [ 24.6 ],
    		"1379282400" : [ 23.5 ],
    		"1381874400" : [ 22.1 ],
    		"1384556400" : [ 20.3 ],
    		"1387148400" : [ 20.1 ]
    	},
    	"time_exec" : 0.023688793182373,
    	"time_server" : 1388092676
    }

    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
    	<meta charset="utf-8">
    	<meta name="viewport" content="initial-scale=1.0">
    	<meta name="author" content="Daniel Hagnoul">
    	<title>Forum jQuery, DVP</title>
    	<script src="http://cdnjs.cloudflare.com/ajax/libs/headjs/1.0.3/head.min.js"></script>
    	<link href='http://fonts.googleapis.com/css?family=Sofia|Ubuntu:400|Kreon'>
    	<script>
    		"use strict";
     
    		 /*
    		  * On utilise head.js pour charger JS et CSS de manière asynchrone 
    		  * et parallèle, mais on les exécute dans l'ordre.
    		  * Voir la documentation et l'API : http://headjs.com/
    		  * Les polices de caractères et le fichier head.js doivent être 
    		  * inclus manuellement.
    		  */
    		head.load(
    			{ "d3" : "http://d3js.org/d3.v3.min.js" },
    			"http://danielhagnoul.developpez.com/lib/dvjh/d3HeadBase.js",
    			{ "jquery" : "http://code.jquery.com/jquery-2.0.3.min.js" },
    			{ "jqueryui" : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js" },
    			"http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/i18n/jquery-ui-i18n.min.js",
    			{ "hightcharts" : "http://code.highcharts.com/highcharts.js" },
    			"http://danielhagnoul.developpez.com/styles/dvjhRemBase.css",
    			"http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/sunny/jquery-ui.min.css"
    		);		
    	</script>
    	<style>
    		/* TEST -- Nota bene : ici 1 rem est égal à 10 px, voir dvjhRemBase.css */
     
    /*-- Début code du test --*/
     
     
    /*-- Fin code du test --*/
     
    	</style>
    </head>
    <body>
    	<header>
    		<hgroup>
    			<h1>Forum jQuery</h1>
    			<h2>
    				<a href="">Lien</a>
    			</h2>
    		</hgroup>
    	</header>
    	<section class="conteneur">
            <nav>
     
    <!-- Début code du test -->
     
     
    <!-- Fin code du test -->
     
            </nav>
    	    <article>
     
    <!-- Début code du test -->
     
    <div id="containerLine" style="width:100%; height:400px;"></div>
    <div id="containerBar" style="width:100%; height:400px; margin-top: 24px;"></div>
     
    <!-- Fin code du test -->
     
    	    </article>
     
    	</section>
    	<footer itemscope itemtype="http://danielhagnoul.developpez.com/">
    		<time datetime="2013-12-26T23:39:11.293+0100" pubdate>2013-12-26T23:39:11.293+0100</time>
    		<span itemprop="name">Daniel Hagnoul</span>
    		<a href="http://www.developpez.net/forums/u285162/danielhagnoul/" itemprop="url">@danielhagnoul</a>
    		<a href="http://danielhagnoul.developpez.com/" itemprop="url">Mon cahier d’exercices</a>
    		<a href="http://javascript.developpez.com/faq/jquery/" itemprop="url">FAQ</a>
    		<a href="http://javascript.developpez.com/cours/?page=frameworks#jquery" itemprop="url">Tutoriels</a>
    	</footer>
    	<script>
    		"use strict";
     
    		/*
    		 * Chargeur de code head.js, document ready et fichiers chargés.
    		 */
    		head.ready( [ "d3", "jquery", "jqueryui", "hightcharts" ], function(){
     
    			var ISOformat = d3.time.format( "%Y-%m-%dT%H:%M:%S.%L%Z" );
     
    /* Début code du test */
     
        var datasetX = [],
            datasetY = [],
            jqXHR = $.getJSON( "HCtest.json" );
     
        jqXHR.done( function( data, textStatus, jqXHR ){
            // succès de la transaction, on doit traiter le contenu de data
            console.log( data, textStatus, jqXHR );
     
            $.map( data.body, function( value, key ){
                datasetX.push( key );
                datasetY.push( value[ 0 ] );
            });
     
        });
     
        jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
            // échec de la transaction, gérer la catastrophe
            console.log( jqXHR, textStatus, errorThrown );
     
        });
     
        jqXHR.always( function( jqXHR, textStatus ){
            // la transaction est terminée
            console.log( jqXHR, textStatus );
     
            $( '#containerLine' ).highcharts({
                "title" : {
                    "text" : 'Mon graphique'
                },
                "xAxis" : {
                    "categories" : datasetX
                },
                "series" : [
                    {
                        "data" : datasetY,
                        "name" : 'Série n° 1'
                    }
                ]
            });
     
            $( '#containerBar' ).highcharts({
                "chart" : {
                    "type" : 'bar'
                },
                "title" : {
                    "text" : 'Mon graphique'
                },
                "xAxis" : {
                    "categories" : datasetX
                },
                "yAxis" : {
                    "title" : {
                        "text" : 'Mon titre'
                    }
                },
                "series" : [
                    {
                        "name" : 'Série n° 1',
                        "data" : datasetY
                    }
                ]
            });
     
        });
     
    /* Fin code du test */
     
    		});
    	</script>
    </body>
    </html>

    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.)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci à vous 2.

    J'ai réussi à effectuer le changement directement dans Highcharts.

    Je vais essayer le code de Daniel sachant que les informations peuvent changer et qu'il peut y avoir de nombreuses autres données mais cela me donne une bonne base.

    je souhaite utiliser datepicker pour sélectionner la date des graphique.

    Comment faire le lien entre la sélection dans Datepicker et HighCharts?

  9. #9
    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 : 73
    Localisation : Belgique

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

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

    Je viens de comprendre la raison du "multiplier par mille". Exemple gérant les dates au format international (ISO) :

    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
    	<meta charset="utf-8">
    	<meta name="viewport" content="initial-scale=1.0">
    	<meta name="author" content="Daniel Hagnoul">
    	<title>Forum jQuery, DVP</title>
    	<script src="http://cdnjs.cloudflare.com/ajax/libs/headjs/1.0.3/head.min.js"></script>
    	<link href='http://fonts.googleapis.com/css?family=Sofia|Ubuntu:400|Kreon'>
    	<script>
    		"use strict";
     
    		 /*
    		  * On utilise head.js pour charger JS et CSS de manière asynchrone 
    		  * et parallèle, mais on les exécute dans l'ordre.
    		  * Voir la documentation et l'API : http://headjs.com/
    		  * Les polices de caractères et le fichier head.js doivent être 
    		  * inclus manuellement.
    		  */
    		head.load(
    			{ "d3" : "http://d3js.org/d3.v3.min.js" },
    			"http://danielhagnoul.developpez.com/lib/dvjh/d3HeadBase.js",
    			{ "jquery" : "http://code.jquery.com/jquery-2.0.3.min.js" },
    			{ "jqueryui" : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js" },
    			"http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/i18n/jquery-ui-i18n.min.js",
    			{ "hightcharts" : "http://code.highcharts.com/highcharts.js" },
    			"http://danielhagnoul.developpez.com/styles/dvjhRemBase.css",
    			"http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/sunny/jquery-ui.min.css"
    		);		
    	</script>
    	<style>
    		/* TEST -- Nota bene : ici 1 rem est égal à 10 px, voir dvjhRemBase.css */
     
    /*-- Début code du test --*/
     
     
    /*-- Fin code du test --*/
     
    	</style>
    </head>
    <body>
    	<header>
    		<hgroup>
    			<h1>Forum jQuery</h1>
    			<h2>
    				<a href="">Lien</a>
    			</h2>
    		</hgroup>
    	</header>
    	<section class="conteneur">
            <nav>
     
    <!-- Début code du test -->
     
     
    <!-- Fin code du test -->
     
            </nav>
    	    <article>
     
    <!-- Début code du test -->
     
    <div id="containerLine" style="width:100%; height:400px;"></div>
    <div id="containerBar" style="width:100%; height:400px; margin-top: 24px;"></div>
     
    <!-- Fin code du test -->
     
    	    </article>
     
    	</section>
    	<footer itemscope itemtype="http://danielhagnoul.developpez.com/">
    		<time datetime="2013-12-26T23:39:11.293+0100" pubdate>2013-12-26T23:39:11.293+0100</time>
    		<span itemprop="name">Daniel Hagnoul</span>
    		<a href="http://www.developpez.net/forums/u285162/danielhagnoul/" itemprop="url">@danielhagnoul</a>
    		<a href="http://danielhagnoul.developpez.com/" itemprop="url">Mon cahier d’exercices</a>
    		<a href="http://javascript.developpez.com/faq/jquery/" itemprop="url">FAQ</a>
    		<a href="http://javascript.developpez.com/cours/?page=frameworks#jquery" itemprop="url">Tutoriels</a>
    	</footer>
    	<script>
    		"use strict";
     
    		/*
    		 * Chargeur de code head.js, document ready et fichiers chargés.
    		 */
    		head.ready( [ "d3", "jquery", "jqueryui", "hightcharts" ], function(){
     
    			var ISOformat = d3.time.format( "%Y-%m-%dT%H:%M:%S.%L%Z" );
     
    /* Début code du test */
     
        var datasetX = [],
            datasetY = [],
            jqXHR = $.getJSON( "HCtest.json" );
     
        jqXHR.done( function( data, textStatus, jqXHR ){
            // succès de la transaction, on doit traiter le contenu de data
            console.log( data, textStatus, jqXHR );
     
            $.map( data.body, function( value, key ){
                datasetX.push( ( ISOformat( new Date( key * 1000 ) ) ).split( "T" )[ 0 ] );
                datasetY.push( value[ 0 ] );
            });
     
        });
     
        jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
            // échec de la transaction, gérer la catastrophe
            console.log( jqXHR, textStatus, errorThrown );
     
        });
     
        jqXHR.always( function( jqXHR, textStatus ){
            // la transaction est terminée
            console.log( jqXHR, textStatus );
     
            $( '#containerLine' ).highcharts({
                "title" : {
                    "text" : 'Mon graphique'
                },
                "xAxis" : {
                    "categories" : datasetX
                },
                "series" : [
                    {
                        "data" : datasetY,
                        "name" : 'Série n° 1'
                    }
                ]
            });
     
            $( '#containerBar' ).highcharts({
                "chart" : {
                    "type" : 'bar'
                },
                "title" : {
                    "text" : 'Mon graphique'
                },
                "xAxis" : {
                    "categories" : datasetX
                },
                "yAxis" : {
                    "title" : {
                        "text" : 'Mon titre'
                    }
                },
                "series" : [
                    {
                        "name" : 'Série n° 1',
                        "data" : datasetY
                    }
                ]
            });
     
        });
     
    /* Fin code du test */
     
    		});
    	</script>
    </body>
    </html>

    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.)

Discussions similaires

  1. Jquery et Highcharts
    Par bilbot75 dans le forum jQuery
    Réponses: 0
    Dernier message: 08/05/2013, 01h13
  2. [EJB / REST / JSON / JQuery] Problème pour faire un POST
    Par saveriu dans le forum Services Web
    Réponses: 1
    Dernier message: 19/04/2012, 11h08
  3. Réponses: 2
    Dernier message: 04/04/2012, 10h01
  4. Struts 2 + JSON + JQuery
    Par bourbah dans le forum Struts 2
    Réponses: 2
    Dernier message: 15/11/2011, 11h49
  5. Webservices - JSON - JQUERY
    Par aurelien.tournier dans le forum Services Web
    Réponses: 3
    Dernier message: 07/11/2010, 11h32

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