将Laravel集合/数组转换为Javascript数组

3

我想把 Laravel 中的数组赋值给 JavaScript 数组。我已经从我的 AppServiceProvider 获取了该数组,并对其进行了 json_decode 处理,如下所示:

View::composer('*', function($view)
{
   $users = Users::all();
   $view->with(compact(users );
}

我随后在我的javascript文件中访问$usersArray,如下所示:
  var dataSet = JSON.parse({!!$users !!});

然而,我遇到了以下错误;

jQuery.Deferred exception: Unexpected token o in JSON at position 1 SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)

检查页面上的实际输出。JS代码是什么样子的?从那里开始调试。 - Rory McCrossan
3
可能是将PHP数组转换为JavaScript的重复问题 - Yosvel Quintero
@RoryMcCrossan 我只能得到 Laravel 的错误输出。 - gerry
那个新错误是因为您正在调用JSON.parse()来解析一个格式不是 JSON 的值。现在,您需要检查页面上的实际输出以调试问题,就像我第一条评论中提到的那样。 - Rory McCrossan
@RoryMcCrossan 好的。目前在控制台日志中,我看到jquery.min.js:2未捕获的语法错误:JSON中位置1处的意外标记o 在此之外,这是我能看到的唯一JavaScript输出。 - gerry
显示剩余3条评论
2个回答

7

由于你是在服务器端对其进行编码,因此需要在客户端对其进行解码:

$chequesArray = Users::all()->toJson();

var dataSet = JSON.parse({!!json_encode($chequesArray)!!});

或者使用"base64_encode"来保留json格式,例如:

$chequesArray = base64_encode(Users::all()->toJson());

var dataSet = JSON.parse(atob('{{$chequesArray}}');

主要区别在于使用{{ }}{!! !!},前者会转义特殊字符,将双引号""转换为&quot;,然后JS将无法解析该字符串(这就是我们可以使用`base64_encode`来保留格式的原因),而后者会保留格式并允许引号,使JS能够简单地解析它。

不用谢,这是因为“$users”不是一个数组,而是一个集合。 - Zakaria Acharki
好的,请说明如何将其从集合转换为数组。 - gerry
1
非常感谢你,Zakaria。它起作用了!请解释一下刚才发生了什么。 - gerry
不客气,兄弟。我已经玩了一会儿,你可以看到我的更新答案,其中包括两个可用版本。 - Zakaria Acharki
1
好的。已记下。再次感谢Zakaria。 - gerry
显示剩余5条评论

-2
var dataSet = @php $chequesArray @endphp;

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