【问题标题】:Laravel datatables not working with serverside when using get or post使用 get 或 post 时,Laravel 数据表无法与服务器端一起使用
【发布时间】:2017-06-16 22:56:40
【问题描述】:

我正在使用一个简单的数据表,但是一旦我使用 get 和 laravel 请求来获取获取信息,数据表就不能在服务器端工作了:真的。

JS

serverSide: true,
processing: true,
ajax: {
   url: "{!! route('listOfProjectsAjax') !!}",
   type: "GET",
   data: ajaxData,
   dataType: "JSON"
   },
columns: [...

控制器

public function ListOfprojects(Request $request)
  {
    $inputs = $request->all();
    return $this->projectRepository->getListOfProjects($inputs);
  }

存储库

  public function getListOfProjects($where = null)
  {


    $projectList = $this->project
      ->select( 'id','customer_name','project_name','otl_project_code','project_type','activity_type','project_status','meta_activity','region',
            'country','domain','description','estimated_start_date','estimated_end_date','comments','LoE_onshore','LoE_nearshore',
            'LoE_offshore','LoE_contractor','gold_order_number','product_code','revenue','win_ratio');
    $data = Datatables::of($projectList)->make(true);
    return $data;
  }

我不明白为什么。

我又做了一些测试,服务器端排序,当我有命令时搜索不起作用:

data: ajaxData,

来自我的 ajax 请求。

如果我删除它,那么一切正常,我可以进行服务器端搜索、排序……

以下是来自服务器的 2 个响应: 没有数据:ajaxData,:

{"draw":3,"recordsTotal":7,"recordsFiltered":7,"data":[{"id":66,"customer_name":"Cisco","project_name":"LAN2","project_type":"","activity_type":"","meta_activity":"","region":"","country":"","customer_location":"","domain":"","description":null,"estimated_start_date":"0000-00-00","estimated_end_date":"0000-00-00","comments":null,"LoE_onshore":0,"LoE_nearshore":0,"LoE_offshore":0,"LoE_contractor":0,"gold_order_number":"","product_code":"","revenue":10,"project_status":"","otl_project_code":"","win_ratio":0,"created_by_user_id":1,"otl_validated":0,"created_at":"2017-06-16 18:14:53","updated_at":"2017-06-16 20:23:26"}, ...],"queries":[{"query":"select count(*) as aggregate from (select '1' as `row_count` from `projects`) count_row_table","bindings":[],"time":0.18},{"query":"select * from `projects` order by `customer_name` asc limit 10 offset 0","bindings":[],"time":0.27}],"input":{"draw":"3","columns":[{"data":"id","name":"id","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"project_name","name":"project_name","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"customer_name","name":"customer_name","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"otl_project_code","name":"otl_project_code","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"project_type","name":"project_type","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"meta_activity","name":"meta_activity","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"region","name":"region","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"country","name":"country","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"domain","name":"domain","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"description","name":"description","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"estimated_start_date","name":"estimated_start_date","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"estimated_end_date","name":"estimated_end_date","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"comments","name":"comments","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"LoE_onshore","name":"LoE_onshore","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"LoE_nearshore","name":"LoE_nearshore","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"LoE_offshore","name":"LoE_offshore","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"LoE_contractor","name":"LoE_contractor","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"gold_order_number","name":"gold_order_number","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"product_code","name":"product_code","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"revenue","name":"revenue","searchable":"true","orderable":"true","search":{"value":"","regex":"false"}},{"data":"project_status","name":"project_status","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"win_ratio","name":"win_ratio","searchable":"false","orderable":"true","search":{"value":"","regex":"false"}},{"data":"","name":"actions","searchable":"false","orderable":"false","search":{"value":"","regex":"false"}}],"order":[{"column":"2","dir":"asc"}],"start":"0","length":"10","search":{"value":"","regex":"false"}}}

有数据:ajaxData,:

{"draw":0,"recordsTotal":6,"recordsFiltered":6,"data":[{"id":65,"customer_name":"cxc","project_name":"LAN1","project_type":"","activity_type":"","meta_activity":"","region":"","country":"","customer_location":"","domain":"","description":null,"estimated_start_date":"0000-00-00","estimated_end_date":"0000-00-00","comments":null,"LoE_onshore":0,"LoE_nearshore":0,"LoE_offshore":0,"LoE_contractor":0,"gold_order_number":"","product_code":"","revenue":0,"project_status":"","otl_project_code":"","win_ratio":0,"created_by_user_id":1,"otl_validated":0,"created_at":"2017-06-16 18:14:37","updated_at":"2017-06-16 18:14:37"},...}],"queries":[{"query":"select count(*) as aggregate from (select '1' as `row_count` from `projects` where not exists (select * from `activities` where `activities`.`project_id` = `projects`.`id`)) count_row_table","bindings":[],"time":0.83},{"query":"select * from `projects` where not exists (select * from `activities` where `activities`.`project_id` = `projects`.`id`)","bindings":[],"time":0.76}],"input":{"unassigned":"true"}}

这是我的 ajaxData:

function ajaxData(){
          var obj = {
            'unassigned': 'true'
          };
          return obj;
        }

【问题讨论】:

    标签: laravel datatables


    【解决方案1】:

    您的问题很可能与您的select('*')->make() 的使用有关。包维护者声明永远不要使用它,因为它可能会导致意外行为。阅读此示例顶部的警告:

    https://datatables.yajrabox.com/fluent/basic

    尝试将控制器更改为:

    $projects = DB::table('projects')
                ->select(['id', 'field1', 'field2', 'created_at', 'updated_at']);
    
    return Datatables::of($projects)->make();
    

    这些示例还显示了“GET”请求而不是“POST”的用法。您是否出于某种原因需要使用“POST”?您还可以使用请求输入来优化任务服务器端,如下所示:

    $projects = DB::table('projects')
                ->select(['id', 'field1', 'field2', 'created_at', 'updated_at'])
                ->where('unassigned', $request->input('unassigned'));
    

    【讨论】:

    • 我尝试使用 get 并按照建议使用特定字段修改 * 但仍然是同样的问题...
    • 您能否提供有关该错误的更多详细信息?服务器日志中是否有任何内容?回复有什么信息吗?
    • 顺便问一下,您知道我如何将这种数据添加到调用函数 ajaxData() 的 d 中吗?
    • 我确定 d 只是一个标准的 javascript 对象,这意味着您可以使用 document.getElementById() 或 jQuery 之类的东西从 DOM 获取值并在数据回调期间分配它们。
    • 好的,抱歉,找到了jquery函数:$.extend(d,ajaxData());
    【解决方案2】:

    好吧,看来发布数据的唯一方法就是你这样做:

    而不是使用:

    data: ajaxData,
    

    为了让 Laravel 数据表正常工作,你需要使用:

    data: function ( d ) {
                                d.unassigned = "true";
                            },
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2011-02-28
      • 1970-01-01
      • 2017-09-08
      • 2011-03-14
      相关资源
      最近更新 更多