Ci sono diverse questioni (in aggiunta alla risposta da Henrik)
- è necessario disegnare il grafico nella callback di downloadURL
getAttribute
è un metodo, deve essere markers[i].getAttribute("alt")
- devi convertire l'altitudine in numero, attualmente è una stringa (gli attributi xml sono sempre ays di tipo stringa)
- si sta utilizzando
push
nel modo sbagliato, per ogni indicatore si aggiungono 2 file, 1 per l'id di un 1 per l'altitudine
codice fisso:
function drawChart() {
var graph = [];
downloadUrl("map.php", function (data){
var xml = data.responseXML,
graph = [],
markers = xml.documentElement.getElementsByTagName("marker"),
//create empty datatable
data = new google.visualization.DataTable(),
options = {
title: 'Altitude',
curveType: 'function',
legend: { position: 'bottom' }
},
chart;
for(var i = 0; i<markers.length; i++){
graph.push(//a single array(row) with 2 items(columns)
[
//column 0, id(index) of the marker
i,
//column 1, alt-attribute, converted to float
parseFloat(markers[i].getAttribute("alt"))
]
);
}
//first add columns to the datatable
data.addColumn('number', 'id');
data.addColumn('number', 'Altitude');
//then add the rows
data.addRows(graph);
chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
chart.draw(data, options);
});
}
fonte
2015-09-02 01:10:22
è ' downloadUrl' sincrono? Se è una chiamata ajax, 'graph' potrebbe essere vuoto durante la conversione usando' arrayToDataTable'. – mccannf