You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5如何将GET参数传递给Yajra Datatables的AJAX请求?

解决Laravel 5.5中Yajra Datatables传递URL GET参数的问题

我来帮你搞定这个问题!在Laravel 5.5里把URL上的GET参数(比如lead_name、lead_phone)传给Yajra Datatables的AJAX请求其实很简单,分前端和后端两步来做就行:

一、前端:在Datatables初始化时附加GET参数

在你的results.blade.php视图里,初始化Datatables的时候,通过AJAX配置的data回调函数,把URL里的查询参数合并到请求数据中。这里有两种常用方式:

方式1:自动传递所有URL查询参数

这种方式会把当前页面URL上的所有GET参数都传给Datatables的AJAX接口,适合参数较多或者后续可能新增参数的场景:

$(document).ready(function() {
    $('#your-table-id').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: "{{ route('datatables.results') }}", // 替换成你的Datatables路由
            data: function(d) {
                // 读取当前URL的所有查询参数,合并到Datatables的请求数据里
                const urlParams = new URLSearchParams(window.location.search);
                for (const [key, value] of urlParams.entries()) {
                    d[key] = value;
                }
            }
        },
        // 你的表格列配置...
        columns: [
            { data: 'lead_name', name: 'lead_name' },
            { data: 'lead_phone', name: 'lead_phone' },
            // 其他列...
        ]
    });
});

方式2:只传递指定的参数

如果你只需要传递特定的几个参数(比如lead_name和lead_phone),可以手动提取并添加:

$(document).ready(function() {
    // 从URL中提取目标参数
    const urlParams = new URLSearchParams(window.location.search);
    const leadName = urlParams.get('lead_name');
    const leadPhone = urlParams.get('lead_phone');

    $('#your-table-id').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: "{{ route('datatables.results') }}",
            data: function(d) {
                // 只把需要的参数加到请求里
                if (leadName) d.lead_name = leadName;
                if (leadPhone) d.lead_phone = leadPhone;
            }
        },
        // 列配置...
    });
});

二、后端:接收参数并应用到查询

在你的Datatables控制器方法中,接收前端传过来的参数,然后把它们作为查询条件加到你的模型查询里:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Yajra\DataTables\Facades\DataTables;
use App\Models\YourModel; // 替换成你的模型类

class YourController extends Controller
{
    public function getResults(Request $request)
    {
        // 获取前端传递的参数
        $leadName = $request->input('lead_name');
        $leadPhone = $request->input('lead_phone');

        // 构建基础查询
        $query = YourModel::query();

        // 根据参数添加筛选条件
        if ($leadName) {
            $query->where('lead_name', 'like', "%{$leadName}%");
        }

        if ($leadPhone) {
            $query->where('lead_phone', 'like', "%{$leadPhone}%");
        }

        // 返回Datatables格式的数据
        return Datatables::of($query)
            ->addColumn('action', function($row) {
                // 这里可以添加操作按钮,比如查看、编辑
                return '<a href="'.route('lead.show', $row->id).'" class="btn btn-sm btn-primary">查看详情</a>';
            })
            ->rawColumns(['action']) // 允许HTML内容
            ->make(true);
    }
}

三、路由配置

别忘了在routes/web.php里配置你的Datatables路由:

Route::get('results/datatables', [YourController::class, 'getResults'])->name('datatables.results');

另外还有个小技巧:如果你的结果页面已经能通过Laravel的request()助手拿到参数,也可以直接在blade里把参数拼到AJAX的URL上,比如:

ajax: "{{ route('datatables.results', [
    'lead_name' => request()->lead_name,
    'lead_phone' => request()->lead_phone
]) }}",

不过这种方式不如前面的回调函数灵活,适合参数固定的场景。

这样配置完之后,Datatables的AJAX请求就会带上你URL里的GET参数,后端也能根据这些参数筛选数据啦!

内容的提问来源于stack exchange,提问作者ahinkle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:58:13