2014-12-30 6 views
0

У меня есть этот код, который захватывает данные из XML-файла. Мне нужно передать эти данные в диаграмму google, которая в настоящее время находится в массиве. Мне нужно передать значения xml в диаграмму google. Может ли кто-нибудь помочь мне разобраться в этом. Ниже приведен мой код.Передача массива из одной функции в другую

<!DOCTYPE html> 
<html> 
<head> 

<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script> 

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript"> 

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

    var values = []; 

    $(document).ready(function() { 
     $.ajax({ 
      type: "GET", 
      url: "ChartData.xml", 
      dataType: "xml", 
      success: function(xml) { 
       $(xml).find('Pie').each(function() { 
        var sTitle = $(this).find('Title').text(); 
        var sValue = $(this).find('Value').text(); 
        values.push([sTitle, sValue]); 
       }); 
       drawChart(values); 
      }, 
      error: function() { 
       alert("An error occurred while processing XML file."); 
      } 
     }); 
    }); 

    function drawChart(val) { 
    alert(val); 
     var data = google.visualization.arrayToDataTable([ 
      ['Task', 'Hours per Day'], 
      ['Work',  11], 
      ['Eat',  2], 
      ['Commute', 2], 
      ['Watch TV', 2], 
      ['Sleep', 7] 
     ]); 

     var options = { 
      title: 'My Daily Activities' 
     }; 

     var chart = new google.visualization.PieChart(document.getElementById('piechart')); 

     chart.draw(data, options); 
    } 
</script> 

<title>My Read</title> 
</head> 

<body> 
<div id="piechart" style="width: 900px; height: 500px;"></div> 
</body> 
</html> 

Xml файл

<?xml version="1.0" encoding="utf-8" ?> 
    <Chart> 
     <Pie> 
     <Title>Task</Title> 
     <Value>Hours per Day</Value> 
     </Pie> 
     <Pie> 
     <Title>Work</Title> 
     <Value>11</Value> 
     </Pie> 
     <Pie> 
     <Title>Eat</Title> 
     <Value>2</Value> 
     </Pie> 
     <Pie> 
     <Title>Commute</Title> 
     <Value>2</Value> 
     </Pie> 
     <Pie> 
     <Title>Watch TV</Title> 
     <Value>2</Value> 
     </Pie> 
     <Pie> 
     <Title>Sleep</Title> 
     <Value>7</Value> 
     </Pie> 
    </Chart> 
+0

Вы * * передаете массив как значение функции 'drawChart', но не используете его нигде в нем. 'google.visualization.arrayToDataTable (val)' – Justinas

+0

Да, я не знаю, как его использовать в google.visualization.arrayToDataTable (val) – user3689990

+0

Можете ли вы показать мне, как это сделать. Спасибо – user3689990

ответ

1

Изменить этот

var data = google.visualization.arrayToDataTable([ 
      ['Task', 'Hours per Day'], 
      ['Work',  11], 
      ['Eat',  2], 
      ['Commute', 2], 
      ['Watch TV', 2], 
      ['Sleep', 7] 
     ]); 

в

var data = google.visualization.arrayToDataTable((Array.isArray(val) && val.length) ? val : [ 
    ['Task', 'Hours per Day'], 
    ['Work',  11], 
    ['Eat',  2], 
    ['Commute', 2], 
    ['Watch TV', 2], 
    ['Sleep', 7] 
]); 

если значение массива и не пусто - пройти val работать, иначе варианты частот по умолчанию.

Кроме того, необходимо преобразовать sValue из строки на номер, как этот

$(xml).find('Pie').each(function() { 
    var sTitle = $(this).find('Title').text(); 
    var sValue = $(this).find('Value').text(); 

    if (!isNaN(+sValue)) { 
     sValue = +sValue; 
    } 

    values.push([sTitle, sValue]); 
}); 
+0

Спасибо Александру. Он отлично работал. Спасибо всем за помощь :) – user3689990

0

Вы прошли этот массив в drawChart() функции, как,

drawChart(values); 

Надеется, что он будет работать нормально.

+0

Нет. Я пробовал это раньше. Когда я это делаю, он не показывает данные на диаграмме – user3689990

0

Может быть, вы просто смущать себя по телефону drawChart дважды: один раз в google.setOnLoadCallback(drawChart) и один раз в функции успеха. Удалите его в setOnLoadCallback (или создайте функцию, которая следит за статусом загрузки для обоих, и вызовы drawChart, когда оба загружены). И реализуйте предложения Александра.

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