Google Chart Api: не загружает данные

Я использую Google Charts API, и у меня возникает проблема, которую я не могу понять. Весь код работает хорошо, если я использую последнее предупреждение ("Im IN!"), Но если я удаляю его, мой nArray не заполняется. и я не понимаю почему.

Это глобальные переменные:

 var Chart;
 var data;
 var nArray;

Это где я заполняю свой nArray, чтобы я мог загрузить в свой график.

function setArray(PlayerName,LeadPoints,OppPoints,PropPoints){

        var newPlayer = [PlayerName,LeadPoints,PropPoints,OppPoints,'Total'];

        nArray.push(newPlayer);

    }

Это где я иду в CRM, чтобы принести данные и заполнить мой массив, вызывая setArray функция.

    function setPointsByEntity() {


    SDK.REST.retrieveMultipleRecords(
        "gamify_ponto",
        "$select=gamify_Entidade,gamify_PlayerId,gamify_Pontos,gamify_gamify_utilizador_gamify_ponto/gamify_name&$orderby=gamify_PlayerId asc&$expand=gamify_gamify_utilizador_gamify_ponto",

        function (results) {


            if(results.length>0){

                for(var i=0;i<results.length;i++){
(...) // do something
    setArray(lastPlayer.Name,leadPoints,oppPoints,propPoints);



                }

            }
            else {
               alert("No Contact records are available to set as the primary contact for the account.");
                 }
        },

        errorHandler,

        function () {

        //OnComplete handler
        }
    );

Здесь я загружаю API визуализации, запускаю визуализацию Google и определяю свою функцию drawVisualization.

   // Load the Visualization API and the piechart package.
          google.load('visualization', '1', {'packages':['corechart']});

     // Set a callback to run when the Google Visualization API is loaded.
          google.setOnLoadCallback(drawVisualization);


    function drawVisualization() {



        // Create and populate the data table.
         data = google.visualization.arrayToDataTable(nArray);

      setLabelTotal(data);
      var view = new google.visualization.DataView(data);

      view.setColumns([0, 1, 2, 3, {
         type: 'number',
         calc: function (dt, row) {
             // set offset to determine how far you want to move the labels
             var offset = MaxArray(nArray) *0.03; // 3% do valor total.
             return dt.getValue(row, 1) + dt.getValue(row, 2) + dt.getValue(row, 3) + offset;
         }
     },
     4]);


      var options = {title:"Pontos por Jogador",
                     width:500, height:300,
                     hAxis: {
                        textStyle: {'color': 'white'}},
                 isStacked: true,
                     legend: {
                    position: 'top'
                    },
                    series: {
             3: {
                 type: 'line',
                 color: 'grey',
                 lineWidth: 0,
                 pointSize: 0,
                 visibleInLegend: false
             }
         },

              vAxis: { 
                viewWindowMode:'explicit',
                viewWindow: {
                        max:MaxArray(nArray) + MaxArray(nArray)*0.3,
                        min:0
                    }
              },
                 animation:{
                            duration: 1000,
                            easing: 'linear'}
                    };

        // Create and draw the visualization.
         chart = new google.visualization.ColumnChart(document.getElementById('visualization'));

         chart.draw(view, options);

      }

Наконец, когда dom готов, я назначаю свой nArray, вызывая setPointsByEntity(), Проблема в том, что если я прокомментирую "alert("Im IN!");" Диаграмма не появится. Кажется, что nArray не является определением.

// всякий раз, когда дом готов

$(document).ready(function()
{

setPointsByEntity(); // This function fill my nArray
alert("Im IN!");
});

Этот вопрос может иметь отношение к другому, который я опубликовал ранее, пожалуйста, следуйте этому вопросу

1 ответ

Переместить setPointsByEntity из обработчика документов готов к обратному вызову из загрузчика Google, а затем вызвать drawVisualization функция в конце обработчика успеха вызова AJAX:

google.setOnLoadCallback(setPointsByEntity);

function setPointsByEntity() {
    SDK.REST.retrieveMultipleRecords(
        "gamify_ponto",
        "$select=gamify_Entidade,gamify_PlayerId,gamify_Pontos,gamify_gamify_utilizador_gamify_ponto/gamify_name&$orderby=gamify_PlayerId asc&$expand=gamify_gamify_utilizador_gamify_ponto",
        function (results) {
            if(results.length>0){
                for(var i=0;i<results.length;i++){
                    (...) // do something
                    setArray(lastPlayer.Name,leadPoints,oppPoints,propPoints);
                }
            }
            else {
                alert("No Contact records are available to set as the primary contact for the account.");
            }
            drawVisualization();
        },
        errorHandler,
        function () {
            //OnComplete handler
        }
    );
}
Другие вопросы по тегам