Javascript 未捕获类型错误:无法读取属性';ChartWrapper';未定义的
我正在尝试将Google图表与Wordpress集成,使用高级自定义字段输入来填充数据。在Javascript中只进行了一次迭代之后 从我收集的其他问题来看,google.visualization不能及时加载,因为它还没有定义,但这些问题的作者没有使用setOnLoadCallback。我有,应该解决这个问题。我误解了什么 functions.php:Javascript 未捕获类型错误:无法读取属性';ChartWrapper';未定义的,javascript,php,jquery,wordpress,google-visualization,Javascript,Php,Jquery,Wordpress,Google Visualization,我正在尝试将Google图表与Wordpress集成,使用高级自定义字段输入来填充数据。在Javascript中只进行了一次迭代之后 从我收集的其他问题来看,google.visualization不能及时加载,因为它还没有定义,但这些问题的作者没有使用setOnLoadCallback。我有,应该解决这个问题。我误解了什么 functions.php: function create_chart(){ if( have_rows('chart') ){ wp_e
function create_chart(){
if( have_rows('chart') ){
wp_enqueue_script( 'google-charts', 'https://www.gstatic.com/charts/loader.js' );
$chart_data = array();
while( have_rows('chart') )
array_push( $chart_data, the_row(true) );
wp_register_script( 'chart-generator', get_stylesheet_directory_uri() . '/js/chart-generator.js' );
wp_enqueue_script( 'chart-generator', true );
wp_localize_script( 'chart-generator', 'chart_data', $chart_data);
}
}
add_action( 'wp_head', 'create_chart');
chart-generator.js
(function($){
google.charts.load('current', {packages: ['corechart']});
for(i=0; i<chart_data.length; i++){
// Reencodes objects as arrays
next_chart = chart_data[i];
for(j=0; j<next_chart.entry.length; j++)
next_chart.entry[j] = Object.values( next_chart.entry[j] );
console.log(next_chart);
google.charts.setOnLoadCallback(
drawPieChart(
next_chart.title,
next_chart.id,
next_chart.colors,
next_chart.entry));
}
})(jQuery);
function drawPieChart( title, id, colors, entries) {
// Appends to beginning of array
entries.unshift( ['title', 'quantity'] );
var wrapper = new google.visualization.ChartWrapper({
chartType: 'PieChart',
dataTable: google.visualization.arrayToDataTable(entries),
options: {
'title': title,
pieHole: 0.4,
},
containerId: id
});
wrapper.draw();
}
(函数($){
load('current',{packages:['corechart']});
对于(i=0;i首先,您需要加载'controls'
包,
使用ChartWrapper
或ControlWrapper
google.charts.load('current', {packages: ['corechart', 'controls']});
接下来,setOnLoadCallback
引用一个函数
,
不是函数()的结果。
它应该是-->google.charts.setOnLoadCallback(drawPieChart);
如果需要向回调传递参数,添加一个匿名函数或类似的函数
google.charts.setOnLoadCallback(function () {
drawPieChart(
next_chart.title,
next_chart.id,
next_chart.colors,
next_chart.entry
);
});
此外,回调只需要使用一次,
第一次触发后,您可以根据需要绘制任意多个图表 建议重组如下
google.charts.load('current', {packages: ['corechart', 'controls']});
google.charts.setOnLoadCallback(function () {
for(i=0; i<chart_data.length; i++){
// Reencodes objects as arrays
next_chart = chart_data[i];
for(j=0; j<next_chart.entry.length; j++)
next_chart.entry[j] = Object.values( next_chart.entry[j] );
console.log(next_chart);
drawPieChart(
next_chart.title,
next_chart.id,
next_chart.colors,
next_chart.entry);
}
});
google.charts.load('current',{packages:['corechart','controls']});
google.charts.setOnLoadCallback(函数(){
对于(i=0;i首先,您需要加载'controls'
包,
使用ChartWrapper
或ControlWrapper
google.charts.load('current', {packages: ['corechart', 'controls']});
接下来,setOnLoadCallback
引用一个函数
,
不是函数()的结果。
它应该是-->google.charts.setOnLoadCallback(drawPieChart);
如果需要向回调传递参数,添加一个匿名函数或类似的函数
google.charts.setOnLoadCallback(function () {
drawPieChart(
next_chart.title,
next_chart.id,
next_chart.colors,
next_chart.entry
);
});
此外,回调只需要使用一次,
第一次触发后,您可以根据需要绘制任意多个图表 建议重组如下
google.charts.load('current', {packages: ['corechart', 'controls']});
google.charts.setOnLoadCallback(function () {
for(i=0; i<chart_data.length; i++){
// Reencodes objects as arrays
next_chart = chart_data[i];
for(j=0; j<next_chart.entry.length; j++)
next_chart.entry[j] = Object.values( next_chart.entry[j] );
console.log(next_chart);
drawPieChart(
next_chart.title,
next_chart.id,
next_chart.colors,
next_chart.entry);
}
});
google.charts.load('current',{packages:['corechart','controls']});
google.charts.setOnLoadCallback(函数(){
对于(i=0;我不确定这是否有意义…google.charts.setOnLoadCallback
这不是google.setOnLoadCallback
?加载前调用图表的问题…不确定这是否有意义…google.charts.setOnLoadCallback
这不是google.setOnLoadCallback
?在loa之前调用图表的问题戴德。。。