2013-02-19 2 views
2

Я пытаюсь нарисовать линейный график, используя диаграммы Google, используя значения из файла .json. Я пробовал, но не добился успеха.Графики Google: данные из .json-файла

Это мой .json файл

[ 
    { 
     "Year":2005, 
     "Sales":25000, 
    }, 
    { 
     "Year":2006, 
     "Sales":25085, 
    }, 
    { 
     "Year":2007, 
     "Sales":186230, 
    }, 
    { 
     "Year":2008, 
     "Sales":35036, 
    }, 
    { 
     "Year":2009, 
     "Sales":15900, 
    }, 
    { 
     "Year":2010, 
     "Sales":35700, 
    } 
] 

Код

google.load("visualization", "1", { packages: ["corechart"] }); 
    google.setOnLoadCallback(drawChart); 

    function loadData(fileName) { 
     // getting json from a remote file 
     // by returning the jqXHR object we can use the .done() function on it 
     // so the callback gets executed as soon as the request returns successfully 
     return $.getJSON(fileName + ".json"); 
    } 

    function drawChart() { 
      var myFile = "Data"; 

     var obj= loadData(myFile); 
     var data = google.visualization.arrayToDataTable(obj); 

     var options = { 
      title: 'Chart Demo' 
     }; 

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

Ошибка

Error: Not an array 
http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js 
Line 2 

Как это исправить?

+0

Не могли бы вы поставить 'console.log (данные),' после строки 'вар данных = google.visualization.arrayToDataTable (объект);' и посмотреть, что вы получаете ... –

+0

@ Will.i .am По-прежнему получать ту же ошибку в консоли – Okky

+0

Обратите внимание, что вы объявляете переменную с именем 'dataTable', которая никогда не используется. –

ответ

3

Попробуйте это, чтобы получить данные JSon из файла.

var data = $.ajax({ 
       url: "Data", 
       dataType: "json", 
       async: false, 
       }).responseText; 
+0

Несколько обновлений по этому поводу. Thanx – Okky

1
// by returning the jqXHR object we can use the .done() function on it 
// so the callback gets executed as soon as the request returns successfully 

Вы не используете .done(), поэтому, когда вы проходите obj вы пропускание jqXHR объекта, который, скорее всего, даже не получают данные.


Это должно работать:

function drawChart() { 
    var myFile = "Data"; 

    //Use getJSON and process the file contents in the callback function 
    $.getJSON(myFile + '.json', function(obj) { 

     var data = google.visualization.arrayToDataTable(obj); 

     var options = { 
      title: 'Chart Demo' 
     }; 

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

У меня нет ошибок. Но график не отображается. – Okky

+0

Поскольку я не работал с визуализацией Google, я не могу с этим поделать. Я могу указать только на неисправный jQuery/javascript. –

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