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

Laravel 8中路由存在但Ajax返回404错误(JQuery Select2场景)

问题原因及修复方案
  • 核心404错误的根因是路由参数不匹配:你在web.php中定义的路由为/searchByName/{var1},其中{var1}是必选路由参数,也就是说只有请求路径符合/searchByName/任意值的格式才会命中该路由;但你JS代码中Ajax请求的路径是/searchByName,没有携带该参数,Laravel路由匹配失败就会返回404。而且你实际是把搜索词放在query参数中传递,这个路由参数完全冗余无意义。
  • 同时你的代码还存在两处潜在错误:控制器未注入Request实例会导致后续调用报500错误,Select2默认需要id和text两个返回字段,现有返回值会导致选项显示空白。

具体修改步骤

1. 调整路由(web.php)

删除冗余的必选路由参数:

Route::get('/searchByName', [App\Http\Controllers\AppointmentsController::class, 'searchByName'])->name('searchByName');

2. 修正控制器逻辑(AppointmentsController.php)

注入Request实例,适配Select2的返回字段要求:

use Illuminate\Http\Request; // 顶部如果已经引入过该类可跳过

public function searchByName(Request $request){
    $key = $request->get('search');
    $name = DB::table('patients_tbl')
            ->select('id', DB::raw("CONCAT(first_name,' ',middle_name,' ',last_name) as text"))
            ->where('first_name', 'LIKE', "%$key%")
            ->get();
    return $name;
}

3. 优化JS代码

把硬编码的请求路径替换为你提前获取的data-url属性值,避免路径拼写错误:

// 仅修改ajax配置段内的url字段即可,其余配置保持不变
ajax: {
    type: "GET",
    url: url, // 替换原来的硬编码"/searchByName"
    delay: 500,
    // 剩余原有配置不变
}

4. 生效配置

执行命令清理缓存确保修改生效:

php artisan route:clear
php artisan cache:clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:27:03