Ошибка типа: переменная не определена — диаграммы Google

#arrays #ajax #charts #typeerror #google-visualization

#массивы #ajax #Диаграммы #ошибка типа #google-визуализация

Вопрос:

 I'm getting TypeError: dataArray is undefined:


for (var i=0; i < dataArray.length; i  )
  

Вот мой код:

  var dataArray = sinAjax(0) ;
            var gdata = new google.visualization.DataTable( );
            //add column labels
            gdata.addColumn ('number', 'x');
            gdata.addColumn ('number', 'sinx');
            //add rows
            for (var i=0; i < dataArray.length; i  ) 
            {
                delete dataArray[i].location;
                delete dataArray[i].outcome_status;
                var row = [];        
                for (var item in dataArray[i]) 
                {
                  row.push(dataArray[i][item]);
                }        
                gdata.addRow(row);
             }
  

функция sinAjax(0) возвращает массив массивов, которые я хочу использовать в качестве точек диаграммы Google. Я должен добавлять столбцы отдельно, поскольку их нет в массиве.

Редактировать:

Теперь я обнаружил, что dataArray имеет тип undefined . Я попытался преобразовать его в массив, используя:

 dataArray = $.makeArray(sinAjax(0)) ;
  

Однако это просто преобразует его в объект javascript.

Как мне преобразовать его в тип array?

Ответ №1:

Проблема была на самом деле с моей функцией sinAjax(0) , это вызов ajax, и я использовал a return внутри функции успеха, когда мне это было нужно на уровень выше.

старый код:

     function sinAjax(xVal)
    {   
        var vArrTestY;

        $.ajax ( {
                async: false,
                type: "POST",
                global: false,
                url: "PHP/calcsin.php",
                data:  { x : xVal } ,
                //dataType: "json",
                success: function (response) 
                {
                    console.log("Response");
                    console.log(response );         
                    vArrTestY = JSON.parse(response);   
                    return vArrTestY;
                }
              }  ) ;            

    }
  

новый код:

 function fSinAjax(xVal)
{   
    var vArrTestY;

    $.ajax ( {
            async: false,
            type: "POST",
            global: false,
            url: "PHP/calcsin.php",
            data:  { x : xVal } ,
            //dataType: "json",
            success: function (response) 
            {
                console.log("Response");
                console.log(response );         
                vArrTestY = JSON.parse(response);               
            }
          }  ) ;            
    return vArrTestY;
}
  

Комментарии:

1. Синхронные вызовы — плохая идея.