laravel获取ajax中输入类型文本的值

时间:2018-01-10 11:24:08

标签: php jquery ajax laravel

我正在尝试获取输入类型文本的值,以将其用于Laravel控制器查询中的where子句。

这是ajax代码的一部分:

$(function() {
    $('#data-table').DataTable({
        "processing": true,
        "serverSide": true,
        "ajax":{
             "url": "{{ route('item_data_table') }}",
             "dataType": "json",
             "type": "POST",
             "data":{ _token: "{{ csrf_token() }}"}
        },
        ...
        ...
        ...
    });
});

至于我的审判,我尝试改变:

"data":{ _token: "{{ csrf_token() }}"}

成:

"data":{value: $("input[name=categoryname]").val()}

然后在我的控制器中,我有这部分查询代码,试试这样:

public function dataTable(Request $request)
    {
        $columns = [
            1 => 'id',
            2 => 'item_name',
            3 => 'item_category_name',
            4 => 'item_detail_category_name',
        ];

        $categoryname = Input::get('value');

        $totalData = MItem::count();
        $totalFiltered = $totalData;
        $limit = request()->length;
        $start = request()->start;
        $order = $columns[request()->order[0]['column']];
        $dir = request()->order[0]['dir'];
        $items = MItem::select('m_item.id',
                        'm_item.item_name',
                        'm_item_category.item_category_name',
                        'm_item_detail_category.item_detail_category_name'
                    )
                    ->join('m_item_category', 'm_item.item_category_id', 'm_item_category.id')
                    ->join('m_item_detail_category', 'm_item.item_category_detail_id', 'm_item_detail_category.id');
                    if($categoryname) {
                        $items->where('m_item_category.item_category_name', 'like', '%'.$userID.'%');
                    }
                    $items->offset($start)
                    ->limit($limit)
                    ->orderBy($order, $dir)
                    ->get();
        $data = [];

...
...
...
}

我使用$cateogryname作为我的where子句,但无法成功完成。

如何完成代码?

3 个答案:

答案 0 :(得分:3)

您无需手动传递令牌。只需set up it once并将其用于所有Ajax调用:

<meta name="csrf-token" content="{{ csrf_token() }}">

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

这也允许你不要将PHP与JS混合。

答案 1 :(得分:2)

尝试传递这样的数据

 data: function (d) {
            d.name = $('input[name=name]').val();
            d.email = $('input[name=email]').val();
        }
你可以在这里找到例子 https://datatables.yajrabox.com/collection/custom-filter

答案 2 :(得分:0)

感谢您给我提供想法的人,不知怎的,我这样做了,并让我的搜索功能正常工作:

用于ajax代码:

"ajax":{
         "url": "{{ route('item_data_table') }}",
         "dataType": "json",
         "type": "POST",
         "data":{
                _token: "{{ csrf_token() }}",
                'item_detail_category_name': $('#item_detail_category_name').val(),
                'item_category_name': $('#item_category_name').val(),
         }
}

并且对于控制器条件,

 $limit = request()->length;
        $start = request()->start;
        $order = $columns[request()->order[0]['column']];
        $dir = request()->order[0]['dir'];
        $items = MItem::select('m_item.id',
                        'm_item.item_name',
                        'm_item_category.item_category_name',
                        'm_item_detail_category.item_detail_category_name'
                    )
                    ->join('m_item_category', 'm_item.item_category_id', 'm_item_category.id')
                    ->join('m_item_detail_category', 'm_item.item_category_detail_id', 'm_item_detail_category.id');

        if(request()->item_category_name) {
            $items->where('m_item_category.item_category_name', 'like', '%'.request()->item_category_name.'%');
        }

        if(request()->item_detail_category_name) {
            $items->where('m_item_detail_category.item_detail_category_name', 'like', '%'.request()->item_detail_category_name.'%');
        }

        $totalData = $items->get()->count();
        $totalFiltered = $totalData;

        $data = [];

        $items->offset($start)->limit($limit)->orderBy($order, $dir);

        $items = $items->get();