将PHP数组值推送到JavaScript数组中?
我正在与Blockly合作制作一些积木。所有的错误都是在我做方块时出现的。 有人知道为什么我的代码不能在Blockly中工作吗 我有一个包含一组JSON代码的URL。 我使用以下方法获得myPhp.php文件中的内容:将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 ( [
$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>