如何在 JavaScript 中访问 PHP 数组?

5

我有一个非常简单的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);

我得到的结果是:

$array未定义


2

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

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

我得到的结果是:

500 内部错误

htmlentities() 期望第一个参数为字符串,但却传递了数组(视图:/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)}}'));

我得到的结果是:

未捕获的SyntaxError:JSON中意外的token &,位于第1个位置


5

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

我得到的结果是:

json_decode() 期望第一个参数为字符串,但却传递了数组


6

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

我得到的结果是:

json_decode() 期望第一个参数为字符串,但却传递了数组


目标

我只想在Javascript中访问我的数组作为Javascript数组或JSON。请问有人能告诉我怎么做吗?


你在使用什么模板语言来处理 {{ ... }} 这种语法?是 Blade、Smarty 还是其他的?你应该像这样使用 console.log({{ json_encode($array)}});(不带引号,因为 json_encode 会根据需要添加引号),但你需要原始形式,跳过模板引擎似乎执行的 htmlentities() 调用。 - rickdenhaan
@rickdenhaan:blade.php - code-8
@rickdenhaan:这个{!! json_encode($array) !!}似乎可以解决问题。 - code-8
我尝试使用 console.log({!! json_encode($array) !!}); - 现在,我得到了 console.log({!! json_encode($array) !!}); - code-8
回显 "<script>var myData = JSON.parse("" . json_encode($array, TRUE) . "");</script>"; 然后在 Javascript 中:"<script>document.addEventListener('DOMContentLoaded', function(e) { alert(myData.a + '\n' + myData.b + '.......'); });</script>"。 - Alejandro Iván
显示剩余3条评论
4个回答

8

在 Blade 模板中,{{ $variable }} 会输出经过 htmlentities() 转义后的字符串,以确保其在 HTML 中的安全使用。如果您需要提取未转义版本,可以使用 {!! $variable !!}

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

你不需要在它周围添加引号,json_encode()会输出一个有效的javascript对象。如果有必要,它将自动添加引号,如果你自己添加引号,你将得到JSON 字符串而非JSON 对象


1
在Laravel中,您可以使用{!! !!}来跳过实体转义。
console.log({!! json_encode($array) !!});

0
只需将其作为 JSON 数据回显并在 JavaScript 中使用即可。
<?php
  $array = [];
  $array['a'] = '1';
  $array['b'] = '2';
  $array['c'] = '3';
?>
<script>var jsArr = <?=json_encode($array);?>;
alert(jsArr);</script>

由于澄清您正在使用 Blade,因此应该是:

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

{ ... } 是您字符串的转义版本。但是您需要未转义的字符串。这可以通过使用{!! ... !!}来实现。


你确定吗?我觉得我试过了,让我再试一次。 - code-8
你尝试过使用JSON.parse('<?=json_encode($array)?>'),但那太麻烦了。JSON是JavaScript对象表示法,你不需要再解码一次。明白了吗?如果有任何进一步的问题,请随时问。 - Joshua K

0
首先,您必须了解PHP运行在服务器端,而JavaScript运行在客户端。当PHP生成响应时,您应该打印出类似以下的脚本:
echo "<script>
var sheison = JSON.parse(".dd(json_encode($array)).");
console.log(sheison);
</script>";

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接