Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP数组值推送到JavaScript数组中?_Javascript_Php_Blockly - Fatal编程技术网

将PHP数组值推送到JavaScript数组中?

将PHP数组值推送到JavaScript数组中?,javascript,php,blockly,Javascript,Php,Blockly,我正在与Blockly合作制作一些积木。所有的错误都是在我做方块时出现的。 有人知道为什么我的代码不能在Blockly中工作吗 我有一个包含一组JSON代码的URL。 我使用以下方法获得myPhp.php文件中的内容: $data = file_get_contents("URL"); 然后,我使用以下方法解码数据: $objects = json_decode($data, true); $objects包含: [0] => Array ( [

我正在与Blockly合作制作一些积木。所有的错误都是在我做方块时出现的。 有人知道为什么我的代码不能在Blockly中工作吗

我有一个包含一组JSON代码的URL。 我使用以下方法获得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>

var obj=新数组();
目标推力(“”);
$value
需要所有这些数据


但是我得到了
无效或意外的令牌
JavaScript错误。当我查看源代码时,它显示错误与这一行相关:
obj.push
,它说
obj.push(“
注意:第20行myPhp.php中的数组到字符串转换
Array”)

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

$key

美元价值

 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>

var obj=新数组();
目标推力(“”);

不要在数组中循环甚至解码(除非有特殊原因),只需使用
json\u encode
。JSON是JavaScript的母语,因此它可以理解它

var obj=;

让您开始的几件事:

  • JSON是“JavaScript对象表示法”。尽管它在许多其他语言中都有使用,但JavaScript本身就理解它

    这意味着一旦获得了JSON字符串,就可以直接从中获取JavaScript对象。如果JSON字符串表示单个对象,那么将得到单个JavaScript对象。如果它代表一个数组,您将得到一个JavaScript对象的JavaScript数组。如果它是某种嵌套结构,那么您将得到它。在现代浏览器中,您只需在JavaScript端执行这些操作即可

  • 要将JSON转换为JavaScript,请执行以下操作之一:

    • 直接用JavaScript或jQuery之类的帮助程序获取它。这将需要您了解一些异步编程,因此,也许以下其中一项更容易开始:

    • 在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不知道如何处理第二个单引号后的文本,并在参数列表
后抛出
uncaughtsyntaxerror:missing)。同样,换行可能会很麻烦,比如在生成JavaScript时意外地出现PHP错误(原因已解释),这将产生无效的JavaScript并抛出无效或意外的标记

obj.push('<br />
<b>Notice</b>: Array to string conversion
in <b>myPhp.php</b> on line <b>20</b><br /> Array');
但一般来说,你可能不知道你得到了什么值,所以这些字符很麻烦

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

{"quote": "She said: \"Beware\", and walked off.\n\nWe'll remember her."}
上面,您需要注意JSON为转义而添加的反斜杠。因此,可能做,但我没有测试:

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

var obj=JSON.parse(“”);

否则,当第一次使用
json\u decode
$data
解析为PHP对象时(或者甚至不这样做!),当然是首选方法。

当你说“不,我想要”时,你是指“现在我想要”吗?  点击修复它。 (不要在评论中回复。)这是离题的。在其他地方,最好判断是PHP错误还是JavaScript错误,以及后者:显示生成的JavaScript。(我猜:您的
$value
包含单引号。)@Arjan这是错误:obj.push(“
注意:第20行myPhp.php中的数组到字符串转换
Array”);就像我已经评论过的超级用户一样:你问题中最重要的部分(完整、准确的错误信息行,包括JavaScript和换行符)仍然在评论中…:-(另外,如果您不知道
$objects
中的内容以及
$value
中的内容,您希望人们如何帮助您?请参阅stackoverflow.com/help。)/mcve@Arjan这并不能解释为什么JavaScript中会出现
无效或意外的标记(对于
obj.push
,PHP通知消息应该没有问题,除非它以某种方式创建了无效的JavaScript,例如由于PHP消息中的单引号或换行符),但问题还不够具体。此外,在推送所有属性时,直接将完整的JSON字符串传递给JavaScript可能更容易,但我们甚至不知道OP想要推送到
obj
中的内容。无法回送数组,因此obj.push(回送数组)give invalid tokenNope.PHP已经将数组转换为字符串,在本例中为:错误消息。接下来,JavaScript应该不会对
obj.push有任何问题(“
注意:myPhp.PHP中第20行的数组到字符串转换
数组”);
(除非该PHP消息中有新行,这在问题中没有显示)。(不过,我很确定这是问题所在;我不是在批评答案和投票结果。)
{"quote": "She said: \"Beware\", and walked off.\n\nWe'll remember her."}
<script type="text/javascript">
  var obj = JSON.parse("<?= addslashes($data) ?>");
</script>