Error: Not an array in Google charts
Error: Not an array in Google charts
我已经设法通过输出以下字符串从数据库输出结果:
[['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]
如果我将此文本准确粘贴到以下内容中:
var data = google.visualization.arrayToDataTable([['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]);
我可以正确地看到图表。
但是,如果我使用 jQuery .get() 函数获取数据,然后将数据传递给 google 可视化函数,如下所示:
google.load("visualization", "1.1", {packages:["corechart","bar"]});
google.setOnLoadCallback(drawVisualization);
function drawVisualization() {
$.get("{{URL::action('ChartController@investigadoresEdadSexo')}}", function(datos, status){
var data = google.visualization.arrayToDataTable(datos);
var options = {
//many options ...
};
var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
chart.draw(data, options);
});//End of jQuery .get
}
我得到
Not an Array error
我知道我正在传递一个字符串,但如果我通过键入(复制和粘贴)google.visualization.arrayToDataTable() 函数测试了该字符串,为什么它不起作用?或者我如何让该函数将该字符串解释为数组?
我该如何解决这个问题?
尝试使用 JSON.parse
将 datos
转换为数组:
var data = google.visualization.arrayToDataTable(JSON.parse(datos));
更新
在解析 datos
引号之前 '
应转换为 "
:
datos = datos.replace(/'/g, '"');
var data = google.visualization.arrayToDataTable(JSON.parse(datos));
当您将第一个文本直接粘贴到您没有粘贴文本的函数中时,您正在创建一个由 arrayToDataTable
函数使用的数组元素。
正如@phts 所指出的,您必须解析您的字符串以从中创建一个数组元素。将 dataType
参数设置为 "json",它会得到一个 JSON 对象作为结果。
非常感谢你!在使用 jsp...
生成数组列表时,我在代码之前也遇到了非常奇怪的行
如果有人对他们的 jsp 代码有疑问,我就是这样做的。
Connection con = (Connection) session.getAttribute("conexao");
Locale.setDefault(Locale.GERMAN);
if (con == null) {
response.sendRedirect("fimsessao.html");
return;
}
request.setCharacterEncoding("UTF-8");
Statement st;
ResultSet rs;
String cod = String.valueOf(session.getAttribute("cod"));
//Variáveis de Insert e Update
SimpleDateFormat dt = new SimpleDateFormat("yyyy/MM");
String dates = null;
double peso = 0;
ArrayList relPeso = new ArrayList();
relPeso.add("['Datas'");
relPeso.add("'Peso']");
try {
String query = "SELECT `data`, `peso` FROM asaacademia.tblavaliacaofis WHERE idUsuario = '" + cod + "';";
PreparedStatement pstm = con.prepareStatement(query);
rs = pstm.executeQuery();
while (rs.next()) {
dates = dt.format(rs.getTimestamp(1));
peso = rs.getDouble(2);
relPeso.add("['" + dates + "'");
relPeso.add(String.valueOf(peso) + "]");
}
out.print(relPeso);
System.out.print(relPeso);
} catch (Exception e) {
e.printStackTrace();
}
也使用这个 jQuery.parseJSON(queryObject) 作为依据:
As of jQuery 3.0, $.parseJSON is deprecated. To parse JSON objects, use the native JSON.parse method instead.
来源:http://api.jquery.com/jquery.parsejson/
这是我的 HTML 代码:
<div class="well">
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
//Puxar os dados do relatório de peso.
var queryObject = "";
$.ajax({
url: 'peso.jsp',
success: function (data) {
queryObject = data;
//alert(data);
},
error: function (xhr, type) {
alert('server error occoured')
}
});
function drawChart() {
// Create and populate the data table. [['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]
//var data = google.visualization.arrayToDataTable([['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]);
//jQuery.parseJSON()
queryObject = queryObject.trim();
queryObject = queryObject.replace(/'/g, '"');
queryObject = jQuery.parseJSON(queryObject);
var data = google.visualization.arrayToDataTable(queryObject);
var options = {
vAxis: { title: 'Peso em KG' }
};
// Create and draw the visualization.
new google.visualization.LineChart(
document.getElementById('divPeso')).draw(data, options);
}
</script>
<h3>Peso</h3>
<div id="divPeso"></div>
</div>
我已经设法通过输出以下字符串从数据库输出结果:
[['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]
如果我将此文本准确粘贴到以下内容中:
var data = google.visualization.arrayToDataTable([['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]);
我可以正确地看到图表。
但是,如果我使用 jQuery .get() 函数获取数据,然后将数据传递给 google 可视化函数,如下所示:
google.load("visualization", "1.1", {packages:["corechart","bar"]});
google.setOnLoadCallback(drawVisualization);
function drawVisualization() {
$.get("{{URL::action('ChartController@investigadoresEdadSexo')}}", function(datos, status){
var data = google.visualization.arrayToDataTable(datos);
var options = {
//many options ...
};
var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
chart.draw(data, options);
});//End of jQuery .get
}
我得到
Not an Array error
我知道我正在传递一个字符串,但如果我通过键入(复制和粘贴)google.visualization.arrayToDataTable() 函数测试了该字符串,为什么它不起作用?或者我如何让该函数将该字符串解释为数组?
我该如何解决这个问题?
尝试使用 JSON.parse
将 datos
转换为数组:
var data = google.visualization.arrayToDataTable(JSON.parse(datos));
更新
在解析 datos
引号之前 '
应转换为 "
:
datos = datos.replace(/'/g, '"');
var data = google.visualization.arrayToDataTable(JSON.parse(datos));
当您将第一个文本直接粘贴到您没有粘贴文本的函数中时,您正在创建一个由 arrayToDataTable
函数使用的数组元素。
正如@phts 所指出的,您必须解析您的字符串以从中创建一个数组元素。将 dataType
参数设置为 "json",它会得到一个 JSON 对象作为结果。
非常感谢你!在使用 jsp...
生成数组列表时,我在代码之前也遇到了非常奇怪的行如果有人对他们的 jsp 代码有疑问,我就是这样做的。
Connection con = (Connection) session.getAttribute("conexao");
Locale.setDefault(Locale.GERMAN);
if (con == null) {
response.sendRedirect("fimsessao.html");
return;
}
request.setCharacterEncoding("UTF-8");
Statement st;
ResultSet rs;
String cod = String.valueOf(session.getAttribute("cod"));
//Variáveis de Insert e Update
SimpleDateFormat dt = new SimpleDateFormat("yyyy/MM");
String dates = null;
double peso = 0;
ArrayList relPeso = new ArrayList();
relPeso.add("['Datas'");
relPeso.add("'Peso']");
try {
String query = "SELECT `data`, `peso` FROM asaacademia.tblavaliacaofis WHERE idUsuario = '" + cod + "';";
PreparedStatement pstm = con.prepareStatement(query);
rs = pstm.executeQuery();
while (rs.next()) {
dates = dt.format(rs.getTimestamp(1));
peso = rs.getDouble(2);
relPeso.add("['" + dates + "'");
relPeso.add(String.valueOf(peso) + "]");
}
out.print(relPeso);
System.out.print(relPeso);
} catch (Exception e) {
e.printStackTrace();
}
也使用这个 jQuery.parseJSON(queryObject) 作为依据:
As of jQuery 3.0, $.parseJSON is deprecated. To parse JSON objects, use the native JSON.parse method instead.
来源:http://api.jquery.com/jquery.parsejson/
这是我的 HTML 代码:
<div class="well">
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
//Puxar os dados do relatório de peso.
var queryObject = "";
$.ajax({
url: 'peso.jsp',
success: function (data) {
queryObject = data;
//alert(data);
},
error: function (xhr, type) {
alert('server error occoured')
}
});
function drawChart() {
// Create and populate the data table. [['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]
//var data = google.visualization.arrayToDataTable([['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]);
//jQuery.parseJSON()
queryObject = queryObject.trim();
queryObject = queryObject.replace(/'/g, '"');
queryObject = jQuery.parseJSON(queryObject);
var data = google.visualization.arrayToDataTable(queryObject);
var options = {
vAxis: { title: 'Peso em KG' }
};
// Create and draw the visualization.
new google.visualization.LineChart(
document.getElementById('divPeso')).draw(data, options);
}
</script>
<h3>Peso</h3>
<div id="divPeso"></div>
</div>