如何使用 JavaScript 从 Laravel 控制器获取所有值到索引?

How to get all values from Laravel controller to index using JavaScript?

我正在使用 Laravel 从 table 获取所有数据并显示 Leaflet 的坐标列表。目前我正在研究如何在 GisController 中使用 $gis 到索引的 JavaScript.
所以这是 GisController.php

public function index()
{
    $gis = Gis::all();

    return view('gis/map', compact('gis'));
}

这是来自 index.blade.php

foreach ($gis as $gisData) {
    //------- data from controller
    var gisType = $gisData->type;

    if (gisType == 1) {
        //------- data from controller
        var polylinePoints = $gisData->coordinates;
        var polyline = L.polyline(polylinePoints).addTo(map);
    } else if (gisType == 2) {
        //------- data from controller
        var markerPoint= $gisData->coordinates;
        var marker = L.marker(markerPoint).addTo(map);
    }
}

有两种方式:

  1. 使用 ajax return 对象
  2. 将变量设置为 javascript
    <script>
    const gisData = <?php echo json_encode($gis); ?>;
    </script>

注意:可以将$gis转换成数组

你也可以做一个动态 ajax 击中 Laravel api。我看到您正在尝试在表示层中使用逻辑,应该尽量远离它。 您也可以将它发送到已经预格式化的前面以作为 json:

使用
public function index()
{
    $gis = Gis::all()->toJson();

    return view('gis/map', compact('gis'));
} 

在那一点上,你不需要做任何转换,只需在你的 JS 中使用 json,而不必做一堆 php 标签或 blade 标签。

到目前为止,我认为 api 是解决此问题的方法。因此,您可以在需要数据时点击端点,可以在控制器中执行您需要的逻辑,然后将您需要的数据发送到前端。我不知道这个 Gis 模型有多大,但如果它有大量数据,你会看到巨大的性能下降,不断地恢复每一行数据。
示例将使用 get() 或 first() 和/或限制结果。 我的一个项目中有一个 table 超过 100 万条记录,如果我要执行 all() ,服务器会把我吐得一干二净。