【问题标题】:How can I access PHP array inside my Javascript?如何在我的 Javascript 中访问 PHP 数组?
【发布时间】:2018-03-03 05:36:25
【问题描述】:

我有一个非常简单的 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 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: Unexpected token & in JSON at position 1


5

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

我明白了

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


6

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

我明白了

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


目标

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

有人可以帮我填写一下吗?

【问题讨论】:

  • {{ ... }} 语法您使用什么模板语言? Blade,Smarty,还有别的吗?您应该使用console.log({{ json_encode($array)}}); 之类的东西(不带引号,因为 json_encode 会在必要时添加它们),但您需要原始表单,跳过 htmlentities() 调用您的模板引擎似乎可以
  • @rickdenhaan:blade.php
  • 在这种情况下,试试{!! json_encode($array) !!}
  • 会的,我会告诉你进展如何。
  • @rickdenhaan :这个{!! json_encode($array) !!} 似乎可以解决问题。

标签: javascript php arrays json laravel


【解决方案1】:

只需将其作为 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>

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

【讨论】:

  • 你确定,我想我试过了,让我再试一次。
  • 您尝试过但使用了JSON.parse('&lt;?=json_encode($array)?&gt;')。但这太多了。 JSON 是一个 javascript 对象(符号)。您不必再次对其进行解码。知道了?如果您还有其他问题,请随时提问。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    您不需要在其周围添加引号,json_encode() 会输出一个有效的 javascript 对象。它将在必要时添加引号,如果您自己添加它们,您将在您的 javascript 中获得 JSON string,而不是 JSON object

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-02-10
        • 2022-09-23
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-07
        • 1970-01-01
        • 2020-12-26
        相关资源
        最近更新 更多