我正和Blockly合作做一些积木。当我做Blockly积木时,所有的错误都出现了。有人知道为什么我的代码在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');。
发布于 2017-09-17 11:50:51
您的$value本身是一个数组,这里您的$key是0。
$key
[0] => $value
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>发布于 2017-09-17 13:55:49
不要经历遍历数组甚至解码数组的麻烦(除非有特定的原因),只需使用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>发布于 2017-09-17 13:58:47
有几件事可以让你开始:
- Get it in JavaScript directly, [using XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) or helpers such as jQuery's [$.get](http://api.jquery.com/jQuery.get/). That will need you to understand some asynchronous programming, so maybe indeed one of the following is easier to start with:
- Get it in PHP, parse it like you tried in your question, and then generate proper JavaScript to create a JavaScript object or array again. Note that PHP's `json_decode` gets you some associative array, which you then need to map to a JavaScript object.
- Get it in PHP, do not parse it at all, and simply forward the JSON string to JavaScript and parse it there, using `JSON.parse`.
- **Get it in PHP, use** [**Jim's simple solution**](https://stackoverflow.com/questions/46259336/pushing-a-php-array-values-into-the-javascript-array/46264839#46264839) **to get it into JavaScript.**
在PHP中生成JavaScript时,您需要小心使用字符串值中的引号、换行符和其他特殊字符。就像如果JSON是:
{"quote": "She said: 'Beware', and walked off"}...then您不能仅仅将文本连接到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");但一般来说,您可能不知道您得到了什么值,因此你需要“逃跑”麻烦的字符。
我对PHP还不太了解,不知道怎样才是摆脱字符串的最佳方式。由于(有效) JSON使用双引号,它应该在需要时已经转义了双引号。因此,JSON字符串看起来可能如下所示:
{"quote": "She said: \"Beware\", and walked off.\n\nWe'll remember her."}上面,您需要处理JSON为转义而添加的反斜杠。所以PHP加法斜杠 可能做了什么,总线我没有测试这个:
<script type="text/javascript">
var obj = JSON.parse("<?= addslashes($data) ?>");
</script>否则,当第一次使用$data将json_decode解析为PHP (或者甚至不使用json_decode!)时,吉姆的简单解当然是首选。
https://stackoverflow.com/questions/46259336
复制相似问题