2013-12-06 3 views
3

Я создаю DataTable для диаграммы области Google. Таблица, которую я создаю, - это ниже JSON. JSON проверяет и выглядит корректно, но при подаче на диаграмму на диаграмме отображается ошибка «таблица не имеет столбцов».График Google «Таблица не имеет столбцов»

JSON также отображается в соответствии с JSON в файле примера на this page

Вот мой JSON данные:

{ 
    "cols":[ 
    {"id":"","label":"date","type":"string"}, 
    {"id":"","label":"run","type":"number"}, 
    {"id":"","label":"passed","type":"number"} 
    ], 
    "rows":[ 
    {"c":[{"v":"2012-07-20"},{"v":0},{"v":0}]}, 
    {"c":[{"v":"2012-07-23"},{"v":0},{"v":0}]} 
    ] 
} 

Вот как я выборка данных и предоставление его на графике:

function loadData() 
{ 
    var request=new XMLHttpRequest(); 
    request.onreadystatechange=function() 
    { 
     if (request.readyState==4 && request.status==200) 
     { 
      return request.responseText; 
     } 
    } 
    request.open("GET","testsrun.php?json=true&branch=test",true); 
    request.send(); 
} 

google.load("visualization", "1", {packages:["corechart"]}); 
google.setOnLoadCallback(drawChart); 
function drawChart() { 
    var json = loadData(); 
    var data = new google.visualization.DataTable(json); 

    var options = { 
     vAxis: {minValue: 0} 
    }; 

    var chart = new google.visualization.AreaChart(document.getElementById('chart_div')); 
    chart.draw(data, options); 
} 

Кроме того, я знаю, что я могу использовать объект даты вместо строки на дату, я бы предпочел, чтобы не усложнять это, пока я не разрешил инициализации .

ответ

1

Функция loadData не возвращает ничего, поэтому переменная json равна null. Я хотел бы предложить небольшую реорганизацию коды, чтобы получить эффект, который вы хотите:

function drawChart (json) { 
    var data = new google.visualization.DataTable(json); 

    var options = { 
     vAxis: {minValue: 0} 
    }; 

    var chart = new google.visualization.AreaChart(document.getElementById('chart_div')); 
    chart.draw(data, options); 
} 
function loadData() { 
    var request=new XMLHttpRequest(); 
    request.onreadystatechange = function() { 
     if (request.readyState == 4 && request.status == 200) { 
      drawChart(request.responseText); 
     } 
    } 
    request.open("GET","testsrun.php?json=true&branch=test",true); 
    request.send(); 
} 
google.load('visualization', '1', {packages:['corechart'], callback: loadData}); 

Кроме того, номер в вашем JSON которые поступают в виде строк, которые будут вызывать проблемы с диаграммами. Вам нужно ввести их в виде чисел, например. {"v":"0"} должно быть {"v":0}. Если вы используете json_encode функцию PHP, чтобы построить свой JSON, вы можете передать JSON_NUMERIC_CHECK в качестве второго аргумента в вызове функции, чтобы убедиться, что ваши номера введены верно:

json_encode($myData, JSON_NUMERIC_CHECK); 
+0

Я возвращаю request.responseText внутри request.onreadystatechange – fishpen0

+1

О, теперь я понимаю. Функция заканчивалась, и обратный вызов происходил позже, поэтому переменной уже присвоено значение null. Благодаря! – fishpen0

Смежные вопросы