L'API Googlechamps affiche l'écran vide avec $(document).prêt de la méthode

j'ai plusieurs fonctions qui instancient diverses cartes en utilisant L'API Googlechamps.

quand je les appelle sans la méthode $(document).ready de jQuery, tout fonctionne très bien. Mais avec cette méthode, je regarde l'écran vide.

pourquoi?

<script type="text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js" charset="utf-8"></script>
<script type="text/javascript" src = "http://www.google.com/jsapi" charset="utf-8"></script>
function drawColumnChart1(){..some code..}
function drawColumnChart2(){..some code..}
function drawGeoChart(){.some code..}

//This works fine.
google.load("visualization", "1", {packages:["piechart", "corechart", "geomap"]});
google.setOnLoadCallback(window.drawColumnChart1);
google.setOnLoadCallback(window.drawColumnChart2);
google.setOnLoadCallback(window.drawGeoChart);



//This doesn't work
$(document).ready(function(){
    google.load("visualization", "1", {packages:["piechart", "corechart", "geomap"]});
    google.setOnLoadCallback(window.drawColumnChart1);
    google.setOnLoadCallback(window.drawColumnChart2);
    google.setOnLoadCallback(window.drawGeoChart);
});

mise à JOUR Voici l'erreur que j'obtiens dans Firebug:

uncaught exception: [Exception... "Could not convert JavaScript argument"  nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"  location: "JS frame :: http://www.google.com/jsapi :: Q :: line 20"  data: no]
http://www.google.com/jsapi
Line 22
28
demandé sur Michael Currie 2011-03-04 21:06:58

9 réponses

de google.setOnLoadCallback avec jQuery $(document).ready(), est-il OK pour mélanger?

est probablement la réponse la plus proche, et la réponse de Ryan Wheale sur ce qui suit peut également être utile.

est-il correct d'utiliser google.setOnLoadCallback plusieurs fois?

20
répondu digitaljoel 2017-05-23 11:44:13

selon la documentation de visualisation de google, vous devez charger le ou les paquets visuels avant pour onload ou jQuery ready. Je suggère de charger immédiatement après la référence du script jsapi comme indiqué ci-dessous.

sinon vous obtiendrez un 1) google n'est pas défini (erreur de référence) ou 2) Si vous utilisez ajax peut-être une réponse blanche et page blanche sans erreurs.

séquence de charge: (utilisant votre exemple)

<script type="text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js" charset="utf-8"></script>
<script type="text/javascript" src = "http://www.google.com/jsapi" charset="utf-8"></script>
<script type="text/javascript">
    google.load("visualization", "1", {packages:["piechart", "corechart", "geomap"]});
</script>

$(document).ready(function(){
    google.setOnLoadCallback(window.drawColumnChart1);
    google.setOnLoadCallback(window.drawColumnChart2);
    google.setOnLoadCallback(window.drawGeoChart);
});
14
répondu tibc-dev 2011-09-19 19:49:05

voici le paradigme que j'utilise. Lancez un rappel pour google.la méthode de chargement, et de ne pas utiliser google.setOnLoadCallback (autant que je sache, ce n'est pas nécessaire).

MyChart.prototype.render = function() {
    var self = this;
    google.load("visualization", 
                "1", 
                { callback: function() { self.visualize(); }, 
                  packages: ["corechart"] }
               );
}

MyChart.prototype.visualize = function() {

    var data = google.visualization.arrayToDataTable(
    [
        ['Year', 'Sales', 'Expenses'],  
        ['2004',  1000,      400],
        ['2005',  1170,      460],
        ['2006',  660,       1120],
        ['2007',  1030,      540]   
    ]);

    var options = {
        title: 'Company Performance',
        hAxis: {title: 'Year', titleTextStyle: {color: 'red'}}
    };

    var chart = new google.visualization.ColumnChart(document.getElementById("mychart_div"));    
    chart.draw(data, options);
}
5
répondu Paul 2012-11-06 04:02:58

salut que la solution n'a pas fonctionné pour moi, apparemment (je suppose que je ne suis pas sûr) Google library a quelques problèmes de portée lorsque vous l'appelez à l'intérieur d'un objet jquery, de sorte que la solution est assez simple (bien que obtenu il n'était pas si simple :s) définir une variable globale et assigner le Google librari:

var localGoogle = google;

est drôle hein :)... puis utilisez la variable que vous avez définie pour invoquer le setOnCallback, il a fonctionné pour moi, j'espère qu'il fonctionne pour vous..

$(document).ready(function(){
    localGoogle.setOnLoadCallback(window.drawColumnChart1);
}
1
répondu Ricardo 2011-11-17 22:36:02

pour une solution alternative, vous pouvez utiliser 'autoloading' pour inclure les paquets que vous voulez dans l'étiquette de script. Cela annule la nécessité de "google.setOnLoadCallback".

voir https://developers.google.com/loader/#AutoLoading pour plus de détails.

donc, vous pouvez tout faire comme vous le feriez normalement à partir de l'événement comme jQuery document ready.

il y a aussi un assistant qui peut définir une URL pour vous, mais actuellement le lien est rompu. La voici quand même: http://code.google.com/apis/loader/autoloader-wizard.html

0
répondu bigtallbill 2012-02-03 07:42:39
0
répondu gounane 2014-01-02 17:44:56

ça marche pour moi:

google.load("visualization", "1", {packages:["corechart"],   
        callback:function(){drawChart();}});
        //google.setOnLoadCallback(drawChart);
        function drawChart() {
        console.log("enter draw");
              var data = google.visualization.arrayToDataTable([
   ['Year', 'value', { role: 'style' } ],
   ['2010', 10, ' color: gray'],
   ['2010', 200, 'color: #76A7FA'],
   ['2020', 16, 'opacity: 0.2'],
   ['2040', 22, 'stroke-color: #703593; stroke-width: 4; fill-color: #C5A5CF'],
   ['2040', 28, 'stroke-color: #871B47; stroke-opacity: 0.6; stroke-width: 8;  
     fill-color: #BC5679; fill-opacity: 0.2']
   ]);
              var view = new google.visualization.DataView(data);

              var options = {
                title: 'Company Performance',
                tooltip: {isHtml: false},
                legend: 'none',
              };

              var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));

              chart.draw(view, options);

        }

Demo: jsfiddle

0
répondu Tehila 2014-09-30 22:18:59
            <!DOCTYPE html>
            <html>
            <head>
            <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
            <script type="text/javascript" src="https://www.google.com/jsapi"></script>
            <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
            <script type="text/javascript">

            google.load("visualization", "1", {packages:["corechart"]});
            function drawChart(gtitle,glabel,gwidth,gheight,gtype,gstart,gend,gid) {

                $.ajax({
                        url: "http://localhost/reporte/response.php",
                                type: "GET",
                                dataType: "JSON",
                                cache: false,
                                async: false,
                                data: {start:gstart,end:gend,id:gid},
                                success: function(data) {
                                    var len = 0;
                                    if (data.length)
                                    {
                                    len = data.length;
                                    }

                                    if(len > 0)
                                    {
                                    dataarray = [[gtitle,glabel]];
                                        for (var i = 0; i< len; i++) {
                                            dataarray.push([data[i].label,data[i].value]);
                                        }
                                    }
                                    else if(len==0)
                                    {

                                    }
                                },
                                error:function(data) 
                                {


                                }
                        });

                    var values = new google.visualization.arrayToDataTable(dataarray);
                    var options = {title: gtitle,width:gwidth,height:gheight};

                            switch(gtype){
                                case 'PieChart':
                                    var chart = new google.visualization.PieChart(document.getElementById('chart'));
                                    break;
                                case 'LineChart':
                                    var chart = new google.visualization.LineChart(document.getElementById('chart'));
                                    break;
                                case 'ColumnChart':
                                    var chart = new google.visualization.ColumnChart(document.getElementById('chart'));
                                    break;
                                case 'AreaChart':
                                    var chart = new google.visualization.ColumnChart(document.getElementById('chart'));
                                    break;
                            }

                    chart.draw(values, options);


            }






            $(document).ready(function(){
            //drawChart('Titulo del Grafico','Tickets',800,800,'PieChart',20141001,20141010,'procedure1');
            //drawChart('Titulo del Grafico','Tickets',400,400,'ColumnChart',20141001,20141010,'procedure2');
            //drawChart('Titulo del Grafico','Tickets',400,400,'LineChart',20141001,20141010,'procedure3');
            drawChart('Titulo del Grafico','Tickets',600,400,'AreaChart',20141001,20141010,'procedure4');
            });

            </script>
            </head>
            <body>

            <div id="chart"></div>

            </body>
            </html>
0
répondu David Cazares 2014-10-10 15:23:08

essayer de fermer l'appel à ready ?

$(document).ready(function(){
    ...
});
^^^
-1
répondu Andomar 2011-03-04 18:09:29