我正在与Blockly合作制作一些Block。当我制作Blockly Blocks时,所有的错误都出现了。 有谁知道为什么我的代码不能在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>
并且$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');
。
答案 0 :(得分:2)
你的$ 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>
答案 1 :(得分:2)
不要经历数组循环甚至解码的麻烦(除非有特定的理由这样做),只需使用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>
答案 2 :(得分:1)
让你开始的一些事情:
JSON是“ JavaScript 对象表示法”。尽管它在许多其他语言中使用,但JavaScript本身也能理解它。
这意味着一旦你有了一个JSON字符串,就可以直接从中获取一个JavaScript对象。如果JSON字符串表示单个对象,则您将获得单个JavaScript对象。如果它代表一个数组,你将获得一个JavaScript对象的JavaScript数组。如果它是一些嵌套结构,那么你就会得到它。在现代浏览器中,您只需在JavaScript端is JSON.parse(...)上完成魔术。
要将JSON引入JavaScript,请执行以下操作:
直接在JavaScript中使用using XMLHttpRequest或jQuery $.get等帮助程序。这将需要你理解一些异步编程,所以可能确实下面的一个更容易开始:
在PHP中获取它,像在您的问题中尝试一样解析它,然后生成适当的JavaScript以再次创建JavaScript对象或数组。请注意,PHP的json_decode
会为您提供一些关联数组,然后您需要将其映射到JavaScript对象。
在PHP中获取它,根本不解析它,只需将JSON字符串转发给JavaScript并使用JSON.parse
将其解析。
使用PHP获取它,使用Jim's simple solution将其转换为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错误(原因解释为in Osama's answer),这会产生无效的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知道什么是逃避字符串的最佳方法。由于(有效)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>
否则,当首次使用$data
将json_decode
解析为PHP对象时(或者甚至不执行此操作时!),Jim's simple solution当然是首选。