首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个PHP数组值推入JavaScript数组中?

将一个PHP数组值推入JavaScript数组中?
EN

Stack Overflow用户
提问于 2017-09-16 17:41:52
回答 3查看 4.2K关注 0票数 2

我正和Blockly合作做一些积木。当我做Blockly积木时,所有的错误都出现了。有人知道为什么我的代码在Blockly中不起作用吗?

我有一个URL,包括一组JSON代码。我使用以下方法获取myPhp.php文件中的内容:

代码语言:javascript
复制
$data = file_get_contents("URL");

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

代码语言:javascript
复制
$objects = json_decode($data, true);

$objects包含:

代码语言:javascript
复制
[0] => Array
        (
            [name] => Light
            [x] => 5
            [h] => 5
            [y] => 5
            [status] => on
        )

现在,我想使用以下方法将这个数据数组推入JavaScript数组中:

代码语言: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.pushobj.push('<br /> <b>Notice</b>: Array to string conversion in <b>myPhp.php</b> on line <b>20</b><br /> Array');

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-17 11:50:51

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

$key

代码语言:javascript
复制
 [0] => 

$value

代码语言:javascript
复制
 Array
    (
        [name] => Light
        [x] => 5
        [h] => 5
        [y] => 5
        [status] => on
    )

因此,$value需要另一个循环来获得如下所示的每个值

代码语言:javascript
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2017-09-17 13:55:49

不要经历遍历数组甚至解码数组的麻烦(除非有特定的原因),只需使用json_encode。JSON是JavaScript的本机语言,所以它会理解它。

代码语言: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
EN

Stack Overflow用户

发布于 2017-09-17 13:58:47

有几件事可以让你开始:

  • JSON是"JavaScript对象表示法“。虽然它在许多其他语言中使用,但JavaScript本机理解它。 这意味着一旦获得了JSON字符串,就可以直接从JSON对象中提取一个JavaScript对象。如果JSON字符串表示单个对象,那么您将得到一个JavaScript对象。如果它表示一个数组,您将得到一个JavaScript数组的JavaScript对象。如果它是一些嵌套结构,那么您就会得到这样的结构。在现代浏览器中,您需要在JavaScript端JSON.parse(.)上完成所有的任务。
  • 要将JSON导入JavaScript,可以这样做:
代码语言:javascript
复制
- 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是:

代码语言:javascript
复制
{"quote": "She said: 'Beware', and walked off"}

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

代码语言:javascript
复制
obj.push('She said: 'Beware', and walked off');

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

代码语言:javascript
复制
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("...")中使用双引号来生成:

代码语言:javascript
复制
obj.push("She said: 'Beware', and walked off");

但一般来说,您可能不知道您得到了什么值,因此你需要“逃跑”麻烦的字符。

我对PHP还不太了解,不知道怎样才是摆脱字符串的最佳方式。由于(有效) JSON使用双引号,它应该在需要时已经转义了双引号。因此,JSON字符串看起来可能如下所示:

代码语言:javascript
复制
{"quote": "She said: \"Beware\", and walked off.\n\nWe'll remember her."}

上面,您需要处理JSON为转义而添加的反斜杠。所以PHP加法斜杠 可能做了什么,总线我没有测试这个:

代码语言:javascript
复制
<script type="text/javascript">
  var obj = JSON.parse("<?= addslashes($data) ?>");
</script>

否则,当第一次使用$datajson_decode解析为PHP (或者甚至不使用json_decode!)时,吉姆的简单解当然是首选。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46259336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档