将 PHP 数组值推入 JavaScript 数组?

Pushing a PHP array values into the JavaScript array?

我正在与 Blockly 合作制作一些 Blocks。当我制作 Blockly Blocks 时出现了所有错误。 有人知道为什么我的代码不能在 Blockly 中运行吗?

我有一个 URL 包括一组 JSON 代码。 我使用 myPhp.php 文件中的内容:

$data = file_get_contents("URL");

然后,我使用以下方法解码数据:

$objects = json_decode($data, true);

$objects 包含:

[0] => Array
        (
            [name] => Light
            [x] => 5
            [h] => 5
            [y] => 5
            [status] => on
        )

现在我想使用以下方法将此数据数组推送到 JavaScript 数组中:

<script type="text/javascript">
    var obj = new Array();
    <?php 
     foreach($objects as $key => $value){ 
    ?>
    obj.push('<?php echo $value; ?>');
    <?php } ?>
</script>

$value 需要所有这些数据。

但我收到 Invalid or unexpected token JavaScript 错误。当我查看源代码时,它显示错误与这一行有关:obj.push 并且显示 obj.push('<br /> <b>Notice</b>: Array to string conversion in <b>myPhp.php</b> on line <b>20</b><br /> Array');

你的 $value 本身是一个数组,这里你的 $key 是 0。

$键

 [0] => 

$值

 Array
    (
        [name] => Light
        [x] => 5
        [h] => 5
        [y] => 5
        [status] => on
    )

所以你需要另一个循环 $value 来获得每个值,就像这样

<script type="text/javascript">
 var obj = new Array();
<?php 
 foreach($objects as $key => $value){ 
   foreach($value as $key1 => $value1){
 ?>
 obj.push('<?php echo $value1; ?>');
 <?php } }?>
</script>

无需经历遍历数组甚至对其进行解码的麻烦(除非有特定原因),只需使用 json_encode。 JSON是JavaScript的母语,所以它会理解。

<?php 
$data = json_decode(file_get_contents("URL"));
?><script type="text/javascript"><?php
    // echo out JSON encoded $data or a string of '[]' (empty JS array) if it is a false value (error occured with json_decode)
    ?>var obj = <?= json_encode($data) | '[]' ?>;<?php
    // In JavaScript "Light" is available as obj[0].name or it does not exist (empty array if an error occured with json_encode or json_decode)
?></script>

一些让你开始的事情:

  • JSON 是“JavaScript 对象表示法”。虽然它在许多其他语言中使用,但 JavaScript 可以理解它。

    这意味着一旦你得到一个 JSON 字符串,你就可以直接从中得到一个 JavaScript 对象。如果 JSON 字符串表示单个对象,您将获得单个 JavaScript 对象。如果它表示一个数组,您将得到一个包含 JavaScript 个对象的 JavaScript 数组。如果它是某种嵌套结构,那么您将得到它。在现代浏览器中,JavaScript 端 只需要 JSON.parse(...) 施展魔法。

  • 要将 JSON 转换为 JavaScript,可以:

    • 直接在JavaScript中获取,using XMLHttpRequest or helpers such as jQuery's $.get。这将需要您了解一些异步编程,因此也许确实从以下内容之一开始更容易:

    • 在 PHP 中获取它,像您在问题中尝试的那样解析它,然后生成适当的 JavaScript 以再次创建一个 JavaScript 对象或数组。请注意,PHP 的 json_decode 为您提供了一些关联数组,然后您需要将其映射到 JavaScript 对象。

    • 在PHP中获取,根本不解析,直接将JSON字符串转发到JavaScript那里解析,使用JSON.parse.

    • 获取到PHP,使用获取到JavaScript.

在PHP中生成JavaScript时,需要注意字符串值中的引号、换行符和其他特殊字符。就像 JSON 是:

{"quote": "She said: 'Beware', and walked off"}

...那么您不能将文本连接到 obj.push('...') 中,因为那样会创建无效的 JavaScript:

obj.push('She said: 'Beware', and walked off');

上面,JavaScript不知道如何处理第二个单引号后的文本,抛出Uncaught SyntaxError: missing ) after argument list。同样,换行符可能会很麻烦,例如在生成 JavaScript 时意外收到 PHP 错误(原因已解释 ),这将产生无效的 JavaScript 并抛出 Invalid or unexpected token:

obj.push('<br />
<b>Notice</b>: Array to string conversion
in <b>myPhp.php</b> on line <b>20</b><br /> Array');

在上面的 JSON 示例中,您可以在 obj.push("...") 中使用双引号来生成:

obj.push("She said: 'Beware', and walked off");

但通常你可能不知道你得到的值是什么,所以you need to "escape"麻烦的字符。

我对 PHP 的了解还不够,不知道转义字符串的最佳方法是什么。由于 (valid) JSON 使用双引号,它应该已经在需要时转义了双引号。因此,JSON 字符串可能如下所示:

{"quote": "She said: \"Beware\", and walked off.\n\nWe'll remember her."}

以上,您需要注意 JSON 已经添加的用于转义的反斜杠。所以 PHP's addslashes 可能 可以,总线我没有测试这个:

<script type="text/javascript">
  var obj = JSON.parse("<?= addslashes($data) ?>");
</script>

否则,当第一次使用 json_decode$data 解析为 PHP 对象时(或者甚至不这样做!),当然首选