首页 > 解决方案 > DataTables 警告:table id=datatable - Ajax 错误。使用 laravel

问题描述

我正在使用 jquery ajax 数据表。我不知道为什么我的浏览器会出现这个错误。我认为我的代码没有错误。有人可以知道这是什么错误吗?我希望$details数据显示在数据表中。

我得到的错误DataTables warning: table id=datatable - Ajax error. For more information about this error, please see http://datatables.net/tn/7

控制器

 public function edit($id)
    {

        $item = User::where('id', $id)->first();

        $details = \DB::table('finances')
                    ->where('finances.user_id', $id)
                    ->orderBy('finances.id' ,'DESC')
                    ->get();

        // dd($details);
        return view('admin.pages.finances.show',[
            'mnuname' => $this->page_title,
            'page_title' => $this->page_title,
            'item' => $item,
            'details' => $details
        ]);

    }

脚本

@section('javascript')
//<script src="{{ asset('js/app.js') }}" ></script>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
//<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.16/js/jquery.dataTables.js"></script>
    <script>
        console.log('asdasd');
        $(document).ready( function () {
            $('#datatable').DataTable({
                "processing": false,
                "serverSide": true,
                "ajax": "/finances/{id}",
                "type": "GET",
                "columns": [
                    { "data": "id" },
                    { "data": "description" },
                    { "data": "amount" },
                    { "data": "date" }
                ]
            });
        });
    </script>
@show

路线

Route::get('finances/{id}', 'FinancesController@edit')->name('admin.finances.edit');

当我dd($details)

Collection {#555 ▼
  #items: array:3 [▼
    0 => {#541 ▼
      +"id": 5
      +"school_id": 1
      +"user_id": 11
      +"amount": "20"
      +"description": "Latest"
      +"date": "2019-11-15"
      +"created_at": null
      +"updated_at": null
    }
    1 => {#558 ▼
      +"id": 2
      +"school_id": 1
      +"user_id": 11
      +"amount": "1000"
      +"description": "New Payables"
      +"date": "2019-11-14"
      +"created_at": null
      +"updated_at": null
    }
    2 => {#549 ▼
      +"id": 1
      +"school_id": 1
      +"user_id": 11
      +"amount": "5000"
      +"description": "Old Payables"
      +"date": "2019-11-13"
      +"created_at": null
      +"updated_at": null
    }
  ]

标签: phpjqueryajaxlaraveldatatables

解决方案


您应该返回 json 编码的数据。

public function ajaxDatatableEdit($id)
    {

        $item = User::where('id', $id)->first();

        $details = \DB::table('finances')
                    ->where('finances.user_id', $id)
                    ->orderBy('finances.id' ,'DESC')
                    ->get();

        return json_encode($details);

    }

还为您的 ajax 制作一个函数,为您的视图制作另一个函数。

 public function viewEdit($id)
    {

        return view('admin.pages.finances.show',[
            'mnuname' => $this->page_title,
            'page_title' => $this->page_title,
            'item' => $item,
        ]);

    }

在您的路线上:

Route::get('finances/{id}', 'FinancesController@ajaxDatatableEdit')->name('admin.finances.edit');`

或者如果您正在使用表格,您可以使用 laravel 数据表

在此处阅读文档


推荐阅读