【问题标题】:Use Datatables in Laravel 5在 Laravel 5 中使用数据表
【发布时间】:2018-08-02 07:24:27
【问题描述】:

嘿,我想在表格上添加分页和搜索字段。由于复杂性,我正在使用 laravel 5.4 和原始查询,因为我必须从太多表中提取数据,而且我也是 laravel 的初学者。我浏览了文档并进行了许多更改,但不幸的是无法获得预期的结果。我收到错误:

(DataTables 警告:table id=vendors - Ajax 错误。更多信息 有关此错误的信息,请参阅http://datatables.net/tn/7)。

到目前为止,这是我的代码。

查看文件:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Vendors</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.12/datatables.min.css"/>

        <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.12/datatables.min.js"></script>
    </head>

    <body>

       <table class="table table-bordered" id="vendors">
            <thead>
                <th> Card Name </th>
                <th> Phone </th>
                <th> Emails </th>
            </thead>                
        </table>

        <script>
            $(document).ready(function () {
                $('#vendors').DataTable({
                    "processing": true,
                    "serverSide": true,
                    "ajax":{
                        "url": "{{ url('allvendor') }}",
                        "dataType": "json",
                        "type": "POST",
                        "data":{ _token: "{{csrf_token()}}"}
                    },
                    "columns": [
                        { "data": "card_name" },
                        { "data": "phone" },
                        { "data": "email" }
                    ]
                });
            });
        </script>
    </body>
</html> 

控制器:

public function allvendor(Request $request)
{

    $vendors =  DB::select( DB::raw("SELECT * FROM `bp` inner join pdbp on bp.id = pdbp.bp_id inner join ( SeLECT bid, GROUP_CONCAT(subc_name SEPARATOR ', ') as cat FROM sub_categories sc inner join `bp_categories` bc on sc.subc_cod = bc.subc_cod group by bid) categories on bp.id = categories.bid inner join ( SeLECT bid, GROUP_CONCAT(material SEPARATOR ', ') as mat FROM product_material pm inner join `bp_materials` bm on pm.material_cod = bm.mat_cod group by bid ) materials on bp.id = materials.bid inner join (SeLECT bid, GROUP_CONCAT(description SEPARATOR ', ') as certt FROM cert c inner join `bp_certificate` bcc on c.id = bcc.cid group by bid) certificate on bp.id = certificate.bid"));

    $columns = array( 
        0 =>'card_name', 
        1 =>'phone',
        2=> 'email',
    );

    $totalData = $vendors::count();

    $totalFiltered = $totalData; 

    $limit = $request->input('length');
    $start = $request->input('start');
    $order = $columns[$request->input('order.0.column')];
    $dir = $request->input('order.0.dir');

    if(empty($request->input('search.value')))
    {            
        $posts = vendors::offset($start)
                     ->limit($limit)
                     ->orderBy($order,$dir)
                     ->get();
    } else {
        $search = $request->input('search.value'); 

        $posts =  vendors::where('card_name','LIKE',"%{$search}%")
                        ->orWhere('phone', 'LIKE',"%{$search}%")
                        ->offset($start)
                        ->limit($limit)
                        ->orderBy($order,$dir)
                        ->get();

        $totalFiltered = vendors::where('card_name','LIKE',"%{$search}%")
                         ->orWhere('phone', 'LIKE',"%{$search}%")
                         ->count();
    }

    $data = array();
    if(!empty($vendors))
    {
        foreach ($vendors as $vendor)
        {
            $nestedData['card_name'] = $vendor->card_name;
            $nestedData['phone'] = $vendor->phone;
            $nestedData['email'] = $vendor->email;

            $data[] = $nestedData;
        }
    }

    $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                );

    echo json_encode($json_data);       
}

我的代码有什么问题??任何帮助都将是非常可观的。

【问题讨论】:

    标签: php laravel-5 datatables laravel-5.4


    【解决方案1】:

    如果您阅读了错误消息中链接到的文档,则会清楚地描述后端通常会发回除 2XX 之外的任何其他状态代码。

    当 jQuery 落入其错误回调处理程序(此回调内置在 DataTables 中)时会发生这种情况,这通常会发生在服务器响应 2xx HTTP 状态以外的任何内容时

    请打开您的开发者控制台 (F12) 并检查向后端发出的请求。也许你走错了路线?也许后端返回 HTTP 5XX 错误。

    如果它是 GET 方法路由,您也可以尝试直接在浏览器中导航到该 URL。

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 2015-07-21
      • 1970-01-01
      • 2015-12-28
      • 2016-02-06
      • 1970-01-01
      • 2015-07-12
      • 2017-12-01
      • 2015-09-10
      相关资源
      最近更新 更多