#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. Синхронные вызовы — плохая идея.