【问题标题】:Quoting PHP Variable inside PHP Variable for Javascript Donut Chart在 Javascript 圆环图的 PHP 变量中引用 PHP 变量
【发布时间】:2016-05-15 08:46:07
【问题描述】:

今天我在将一些 PHP 变量传递给 Javascript 以获得甜甜圈图时遇到了一些困难。我已经搞砸了很长一段时间,还没有弄清楚,我已经检查了这里的帖子以及大量的谷歌搜索,但还没有找到答案。这是我要完成的任务:

我正在尝试将数据从 MySQL 推送到 Javascript 甜甜圈图,以供网络引荐来源到特定 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 语句(例如 foreach($Array as $graph))生成每个“{label”行,以便图表可以根据 fetchArray() 返回的引用名称的数量动态生成。我已经尝试了几乎所有我能想到的方法来完成这项工作 - 将整个 Javascript 行存储在 PHP 中,然后将其回显到 Javascript 等。但它总是会导致 PHP 出现内部错误。

我相信答案就在我的眼皮底下,谢谢大家的宝贵时间。

【问题讨论】:

  • "但是它总是会导致 PHP 出现内部错误",错误是什么?它指向哪一行代码?
  • 它只是执行失败,并显示错误500
  • 500 错误是网络服务器表示“我有一个大问题,但我不想公开谈论它”的方式。查看服务器的错误日志,会有一个明确的信息说明出了什么问题。

标签: javascript php charts


【解决方案1】:

使用json_encode() 生成干净的数据对象:

在 PHP 中:

$data = array( array( 'label' => $graph["referrer"] ), 'value' => $graph["chart"] ) );

在你的 JavaScript 中;

data: <?php echo json_encode($data); ?>

【讨论】:

  • 感谢您的回答,但这段代码只给我留下了“Google.com 2”,而我正在尝试生成从“{”到“}”的整个 Javascript 字符串。
  • "Google.com 2" 绝对不是json_encode() 生成的输出。你在看实际生成的源代码吗?你在正确的地方呼应它吗?
  • 我的错。好的,所以我想我们要去某个地方。这是我的循环代码:
【解决方案2】:

将 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>

【讨论】:

  • 感谢您的回复。因此,在 Javascript 中使用 PHP 变量是我已经能够弄清楚的事情。我希望 PHP 为数组中的每个引用名称实例生成以“{ label:”开头并以“}”结尾的整行。对于循环,我使用 foreach($arrayofreferrers as $graph) 所以我真正需要的是弄清楚如何将整个 Javascript 代码和 PHP 代码一起放在 PHP 回显中。然后 foreach 循环将运行 echo X $arrayofreferrers 中提到的引荐来源网址数。
  • 虽然由你决定,但我强烈建议你按照我的回答去做。顺便说一句 - 如果你有 label' 的值,你会得到什么?
  • 我正在尝试您的代码,但它什么也没返回。我的 MySQL 查询数组是: Array ( [0] => Array ( [referrer] => Facebook [count] => 2 ) [1] => Array ( [referrer] => Direct [count] => 2 ) [2] => Array ( [referrer] => Microsoft [count] => 1 ) [3] => Array ( [referrer] => Ask.com [count] => 1 ) [4] => Array ( [ referrer] => Google [count] => 1 ) ) 所以也许它不起作用,因为我使用的是多维数组?抱歉,我不明白你关于标签值'的问题。
【解决方案3】:

您根本没有循环$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。

【讨论】:

  • 对不起,我的 foreach 代码在
【解决方案4】:

我的最终解决方案是将字符串连接到一个大而丑陋但有效的 glob 中。

<script>
Morris.Donut({
element: 'graph div'
data: {
<?php foreach($multidimarray as $graph): ?>
    <?php echo htmlspecialchars("{label: "."'".$graph['referrer']."'".", value: "."'".$graph['count']."'"." }, "); ?>
<?php endforeach; ?>
]
});
</script>

返回如下: {标签:'Facebook',值:'2'}, {标签:'直接',值:'2'}, {标签:'微软',价值:'1'}, {标签:'Ask.com',值:'1'}, { 标签:“谷歌”,值:“1”},

再次感谢大家的帮助,尽管我不理解他们,但我感谢你们的所有回答。我会标记 Gerald 的回答,因为他首先回应,首先提到 json_encode,让我最接近预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 2013-03-26
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多