我今天有点困难时间将一些PHP变量传递给Javascript for a Donut图表。我现在一直在搞乱这个问题并且还没有弄明白,我已经通过这里的帖子以及众多谷歌搜索进行了检查,但还没有找到答案。这就是我想要完成的事情:
我正在尝试将数据从MySQL推送到Javascript Donut图表,以便将Web引用转移到特定的PHP页面。 Javascript图表的语法如下:
<script>
Morris.Donut({
element: 'css div',
data:
[
{ label: '<?php echo($graph["referrer"]); ?>', value: '<?php echo($graph["chart"]); ?>' },
]
});
</script>
$ graph ['referrer']变量包含引荐者名称,例如“Google.com”,$ graph ['count']变量将引荐者名称的相应记录数保存为数字,例如“ 5" 。
以“{label”开头的Javascript行表示圆环图的一部分。最初从MySQL中提取的数据是通过fetchArray()完成的,我要做的是使用PHP foreach语句生成每个“{label”行(例如foreach($ Array as $ graph))以便图形可以根据fetchArray()返回的引用者名称的数量动态生成。我已经尝试了几乎所有我能想到的工作 - 将整个Javascript行存储在PHP中,然后将其回显到Javascript等。但它总是会导致PHP内部错误。
我确定答案就在我的鼻子底下,谢谢大家的时间。
答案 0 :(得分:2)
使用json_encode()
生成干净的数据对象:
:
$data = array( array( 'label' => $graph["referrer"] ), 'value' => $graph["chart"] ) );
在您的JavaScript中;
data: <?php echo json_encode($data); ?>
答案 1 :(得分:1)
将php变量数组传递给js脚本的正确方法是使用json
。以下是您需要做的事情:
php 部分:
$sql = 'select * from ....'; // your query
// execute query
// as I don't know what mysql api do you use,
// it's kinda pseudo-code
// but the main idea is to get all rows
// you need in one array `$graphs`
$graphs = array();
while ($graph = fetch_array()) {
$graphs[] = array(
'label' => $graph["referrer"],
'value' => $graph["chart"],
);
}
js 部分:
<script>
Morris.Donut({
element: 'css div',
data: <?php echo json_encode($graphs); ?>
});
</script>
答案 2 :(得分:1)
你根本没有循环$graph
个变量。它只有一个:
<script>
Morris.Donut({
element: 'css div',
data: [{
label: '<?php echo($graph["referrer"]); ?>',
value: '<?php echo($graph["chart"]); ?>'
},]
});
</script>
上面的代码只会渲染一个变量。我相信,你应该在这里有一些循环:
<script>
Morris.Donut({
element: 'css div',
data: [
<?php foreach (/* some loop */) { ?>
{
label: '<?php echo($graph["referrer"]); ?>',
value: '<?php echo($graph["chart"]); ?>'
},
<?php } ?>
]
});
</script>
或者最好的方法是使用数组和json_encode()
输出JSON。
答案 3 :(得分:0)
我的最终解决方案是将字符串连接在一个大而丑陋但工作的全局中。
<script>
Morris.Donut({
element: 'graph div'
data: {
<?php foreach($multidimarray as $graph): ?>
<?php echo htmlspecialchars("{label: "."'".$graph['referrer']."'".", value: "."'".$graph['count']."'"." }, "); ?>
<?php endforeach; ?>
]
});
</script>
返回: {label:&#39; Facebook&#39;,价值:&#39; 2&#39; }, {标签:&#39;直接&#39;,价值:&#39; 2&#39; }, {label:&#39; Microsoft&#39;,value:&#39; 1&#39; }, {标签:&#39; Ask.com&#39;,价值:&#39; 1&#39; }, {label:&#39; Google&#39;,value:&#39; 1&#39; },
再次感谢大家的帮助,即使我不理解他们,我也很感谢你的所有答案。我将标记Gerald的答案,因为他首先回答,首先提到了json_encode,并让我最接近预期的结果。