我正在从控制器传递数组。
现在,我将这段代码放入Laravel 6. * Blade View中,
<script>
var app = <?php echo json_encode($array); ?>;
</script>
这很好用。
但是,如果我在自定义app.js文件中放置了同一行(或以下任何行),则此操作将无效。
var app = <?php echo json_encode($array); ?>;
var app = {!! json_encode($array->toArray()) !!};
var app = '<?php echo json_encode($array); ?>';
每次我遇到无效的语法错误。
我不确定这是否对StackOverflow有效,但是我已经尝试了所有其他类似的解决方案,但没有一个对我有用。
答案 0 :(得分:1)
那是因为您无权在js文件中编写php代码,或者可以使用Ajax
来获取php变量。
在声明中,如果您在包含app.js
文件之前将代码放入刀片文件中,则可以在js文件中获取app
变量。
例如:
<script>
var app = @json($array)
</script>
<script src="path to your app js file"></script>
现在,在您的应用js文件中,如果您打印app
变量,您将看到结果
console.log(app);
在您的app.js文件中
答案 1 :(得分:0)
您可以做的一件事是将javascript移至模板并为其创建路由,如下所示:
Route::get('/app.js', function () {
$result = view('app', ['array' => [1,2,3,5,8]]);
return Response::make($result, 200)
->header('Content-Type', 'application/javascript');
});
然后显示在资源\视图中
<script>
var app = <?php echo json_encode($array); ?>;
</script>
常见的做法是创建仅返回json的端点,然后使用在客户端获取api或axios库。
类似这样的东西:
Route::get('/app', function () {
return [1,2,3,5,8];
});
<script>
fetch(endPointUrl("/app")).then(response => {
console.log(response);
}).catch(error => {
console.error(error);
})
</script>
endPointUrl只是一个帮助程序函数,用于创建完整的url。