如何在Javascript中访问PHP数组?

时间:2017-09-21 18:48:12

标签: javascript php arrays json laravel

我有一个非常简单的PHP数组

$array = [];
$array['a'] = '1';
$array['b'] = '2';
$array['c'] = '3';

PHP

如果我dd($array);我得到了

array:3 [▼
  "a" => "1"
  "b" => "2"
  "c" => "3"
]

如果我解码dd(json_encode($array));,我就得到了这个

"{"a":"1","b":"2","c":"3"}"

JS

我希望能够在我的Javascript中访问此变量,所以我尝试了

1

的console.log($阵列);

我得到了

  

$ array未定义

2

我正在使用Laravel。 {{ }} == echo

的console.log( '{{$阵列}}');

我得到了

500 Internal Error

  

htmlentities()期望参数1为字符串,给定数组(查看:/Users/bheng/Sites/portal/resources/views/cpe/index.blade.php)

3

console.log('{{json_encode($ array)}}');

我得到了

要加载的页面,但数据非常糟糕

{"a":"1","b":"2","c":"3"}

4

console.log(JSON.parse('{{json_encode($ array)}}'));

我得到了

  

Uncaught SyntaxError:意外的令牌&在位置1的JSON中

5

console.log(JSON.parse('{{json_decode($ array)}}'));

我得到了

  

json_decode()期望参数1为字符串,给定数组

6

console.log('{{json_decode($ array)}}');

我得到了

  

json_decode()期望参数1为字符串,给定数组

目标

我只是希望能够在Javascript中以Javascript Array或JSON的形式访问我的数组。

有人可以请我填一下吗?

4 个答案:

答案 0 :(得分:7)

在Blade中,{{ $variable }}将输出字符串的转义版本,通过htmlentities()传递,以便在HTML中使用。你想要一个未转义的版本。您可以使用{!! $variable !!}

console.log({!! json_encode($array) !!});

您无需在其周围添加引号,json_encode()会输出有效的javascript对象。它会在必要时添加引号,如果您自己添加引号,您将在javascript中获取JSON 字符串,而不是JSON 对象

答案 1 :(得分:1)

在Laravel你可以使用{!! !!}跳过实体转义

console.log({!! json_encode($array) !!});

答案 2 :(得分:0)

只需将其作为json数据回显并在javascript中使用它。

<?php
  $array = [];
  $array['a'] = '1';
  $array['b'] = '2';
  $array['c'] = '3';
?>
<script>var jsArr = <?=json_encode($array);?>;
alert(jsArr);</script>

编辑,因为澄清您正在使用刀片。那应该是:

<?php
  $array = [];
  $array['a'] = '1';
  $array['b'] = '2';
  $array['c'] = '3';
?>
<script>var jsArr = {!! json_encode($array) !!};
alert(jsArr);</script>

{...}是字符串的转义版本。但是你需要unescapt字符串。这可以通过使用{!! ...... !!}。

答案 3 :(得分:0)

首先,您必须了解PHP在服务器端运行并在客户端运行javascript,因为PHP会做出响应,您应该打印这样的脚本:

echo "<script>
var sheison = JSON.parse(".dd(json_encode($array)).");
console.log(sheison);
</script>";

我没有测试代码,只是想法。