我试图使用从MySQL数据库中提取的数据构建Google图表。
加载页面后,我将进行ajax调用,从MySQL中提取数据并将其返回到视图。
我是这样从PHP返回数据的:
echo json_encode("['test', 'test2', 1],['test2', 'test3', 1],");
现在,当我签入JavaScript返回的数据类型时,它会说"string“。
console.log(typeof myData); // string
然而,图表需要数组。因此,当我将这些数据传递给构建图表的函数时,它会返回错误。下面是我试图构建它的方法:
data.addRows([
myData
]);
但它又带来了:
Uncaught Error: Every row given must be either null or an array.
但是如果我用data.addRows直接对数据进行硬编码的话,它就会非常好.就像下面这样很好
data.addRows([
['test', 'test2', 1],['test2', 'test3', 1],
]);
如何强制JavaScript接受从php返回的myData?
我尝试以数组的形式从PHP中返回数据,并在JavaScript中循环它并填充图表,但有时我返回50000行或更多,而且JavaScript不能很好地处理这么多行的循环(速度慢,有时内存不足和崩溃浏览器)。所以我想如果我以字符串JavaScript的形式返回它,不需要循环它,只需将它传递给图表生成器。
编辑:我附加了我的ajax调用函数和绘制图表的函数
这是从php/mysql中提取数据的ajax调用:
function ajaxCall() {
$(function() {
$.ajax({
type: "POST",
url: "/test",
dataType: "JSON",
success: function(myData) {
// Draw the graph
drawChart(myData);
},
error: function(xhr,status,error) {
console.log("error status: " + status + " / the error is: " + error);
},
});
});
}
此函数将使用从PHP返回的数据绘制图表:
function drawChart(myData) {
var data = new google.visualization.DataTable();
data.addColumn('string', 'From');
data.addColumn('string', 'To');
data.addColumn('number', 'Weight');
data.addRows([
myData
]);
// Calculate graph height, by multiplying number of rows and fixed value
var rowsQty = data.getNumberOfRows();
var autoHeight = rowsQty*15;
if(autoHeight < 300) {
autoHeight = 300;
}
// Sets chart options.
var options = {
// width: 600,
height: autoHeight,
};
// Instantiates and draws our chart, passing in some options.
var chart = new google.visualization.Sankey(document.getElementById('sankey_basic'));
chart.draw(data, options);
}
发布于 2016-02-19 15:03:20
YOu还没有生成数组作为json,您使用了一个包含PHP数组定义的字符串(完整地包含了逗号语法错误),并对其进行了编码:
echo json_encode("['test', 'test2', 1],['test2', 'test3', 1],");
^---------------------string----------------^
所以你要发送的是这段文字:
"\"['test','test2',1]['test2','test3',1],\""
它只是一个json编码的字符串--再说一遍,它不是数组。
如果要遍历实际数组,则需要编码PHP数组,而不是PHP字符串:
echo json_encode(array(array('test', 'test2', 1),array('test2', 'test3', 1));
--or--
echo json_encode([['test1','test2',1],['test2','test3',1]]);
注意缺少关于[[...]]
版本的引号的。
https://stackoverflow.com/questions/35508055
复制相似问题