【问题标题】:Display PHP array variable inside Javascript code [closed]在Javascript代码中显示PHP数组变量[关闭]
【发布时间】:2012-08-22 01:59:05
【问题描述】:

我有一个名为 $usershours 的 php 变量,其中包含一个数组,我想在 Javascript 代码中回显它。我该怎么做?

我试过这个,但没用:

$usershours = "
data.addRow([ new Date(2012,4,1),50119]).+'<br>+'.
data.addRow([ new Date(2012,4,2),242575])";

<script type="text/javascript">
document.write($arrayholder);
</script>

我希望输出是这样的:

data.addRow([ new Date(2012,4,1),50119]) 
data.addRow([ new Date(2012,4,2),242575])

PS - 我需要这种格式,因为这是 Google 图表 API 接受以正确呈现图表的格式。

【问题讨论】:

  • PHP 正在服务器上执行并向浏览器发送 HTML 和 JavaScript。您希望这发生在哪里?
  • &lt;script&gt; ---- JavaScript 包裹它
  • 这不是游戏。 $usershours = "data.addRow([ new Date(2012,4,1),50119]) data.addRow([ new Date(2012,4,2),242575]) "; echo $usersHours; 是您要求的输出。您不会在屏幕上看到任何内容,因为生成的 JavaScript 只是调用了 data 对象上的一个函数。如果您有更多的期望,您需要写一个不同的问题。
  • 一点也不难。把它放在&lt;script&gt;&lt;/script&gt; 标签之间。
  • 然后将&lt;script&gt;标签包裹起来:?&gt;&lt;script&gt;data.addRow([ new Date(2012,4,1),50119]) data.addRow([ new Date(2012,4,2),242575])&lt;/script&gt;&lt;?php

标签: php javascript arrays


【解决方案1】:

据我所知,您希望这段代码在客户端机器上由 javascript 运行:

data.addRow([ new Date(2012,4,1),50119]) 
data.addRow([ new Date(2012,4,2),242575])

简单地说:

<script type="text/javascript">
<?php 
$usershours = "
data.addRow([ new Date(2012,4,1),50119])
data.addRow([ new Date(2012,4,2),242575])";

echo $usershours;
?>
</script>

【讨论】:

  • 非常感谢您的尝试,但它给了我空的结果。
  • 请定义“空结果”,因为这些词显然对您和其他人的意义不同。此代码完全按照您的要求执行。我们不是在“尝试”某种游戏;您的问题已得到解答。
  • @DanGrossman,你是对的,但我的意思是在网页上显示它,因为我将使用谷歌图表 API 的结果来显示一些图表。再次感谢伙计!
  • @DanGrossman 空结果意味着,白页,但你会在源代码中找到代码。
  • 在一些 JavaScript 中包含 data.addRow 语句的白页正是您所要求的。您没有要求编写任何文本或 HTML。
【解决方案2】:

尽管将 PHP 与 JS 混为一谈远非最佳方法,但这也会使您的代码更加整洁。

让我们假设您的数据来自一个数组[从数据库或文件中获取],如下所示:

$data = array(
    array("date" => "2012-04-01", "id" => 50119),
    array("date" => "2012-04-02", "id" => 242575)
);

通过json_encode($data) 你得到这个输出:

[
  { date : "2012-04-01", id : 50119},
  { date : "2012-04-02", id : 242575}
]

现在您知道如何将您的数据从 PHP 结构转换为 Javascript 结构,只需编写即可:

<script>

  var serverData = <?php echo json_encode($data) ?>;

  for(var i = 0; i < serverData.length; i++)
  {

     data.addRow([ new Date( serverData[i].date ), serverData[i].id ]);

  }

</script>

当然data.addRow() 是在您的 JS 代码中某处声明的函数。

【讨论】:

    【解决方案3】:

    如果arrayholder 必须输出为字符串(而不是代码),则只需使用var arrayholder = &lt;?php json_encode($usershours);?&gt;;

    【讨论】:

    • JavaScript 中不需要分号,只要避免一些模棱两可的语法问题。
    • 1.和 2. 分别是不相关和错误的。
    • @Dan Grossman: 是的,据我所知,只有表达式需要分号 ;(...);[...];/.../,还有 "use strict"; 出于某种原因.
    • 已更正。感谢您指出我的错误。
    【解决方案4】:

    一般建议:不要尝试从 PHP 呈现有效的 JavaScript。它最终会咬你,一些替代解决方案:将数据嵌入 HTML 元素并通过 JavaScript 和 Ajax 提取它

    说了这么多

    ?>
    (function () {
       console.log(<?= json_encode($phpVar); ?>);
    }());
    <?
    

    当我可以在脚上开枪时,我就是这样做的

    【讨论】:

    • 咬你我的意思是在你的 JavaScript 中间呈现一个意外错误,由于一些你无法控制的配置。
    • 既然可以在 js 中回显数据,为什么还要将数据嵌入到 HTML 元素中?
    • 这是一个非常武断的规则强加给自己,也与问题无关。
    • JavaScript 崩溃对您的应用程序的损害不亚于您的 JavaScript 所依赖的格式错误的 HTML。如果您正在编写输出 PHP 错误的软件,那是因为您正在编写糟糕的软件,并且无论错误出现在 HTML 中还是出现在你的 JavaScript。如果您希望您的软件工作,您需要编写无错误的软件,而不是试图隐藏 HTML 中的错误,因为“HTML 不会崩溃”。这是一种完全荒谬的态度,也是一种非常愚蠢的编程实践。
    • @Mythril 解决方案是编写良好的代码,并使合理现代的 PHP 安装成为运行软件的必要条件。编写在损坏的主机上运行的软件是令人难以置信的弄巧成拙。我没有说你的技能,但我会说担心只将 PHP 与你的 HTML 混合,因为“你可以放置防止 DOM 被破坏的转义序列(&lt;![CDATA[]]&gt;)”是一个可怕的 设计软件的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多