You need to enable JavaScript to run this app. Laravel如何根据输入框值查询数据库并将对应第二列内容填充到其他字段
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何根据输入框值查询数据库并将对应第二列内容填充到其他字段

问题排查与修复方案

现有代码核心问题

  • 请求方法与路由定义不匹配:AJAX发起的是POST请求,但路由里注册的是GET类型,请求会直接报405错误
  • 缺少Laravel CSRF校验参数:POST请求必须携带CSRF令牌,否则会返回419状态码错误
  • 控制器查询逻辑不符合需求:pluck("c_name","cd_id")返回的是cd_id为键、c_name为值的对象,你需要的是单条匹配记录的c_name值,无需返回关联id,且未做查询结果为空的判断
  • AJAX成功回调未实现填充逻辑:当前仅alert返回数据,没有把值写入第二个输入框,且输入值校验逻辑不严谨,空字符串未被拦截
  • 可选优化:输入框name是数组格式ccode[],如果是多行动态表单的话重复id会导致事件绑定失效,单条场景下不影响

修复步骤

1. 路由调整(改为POST匹配AJAX请求)

Route::post('getcodename',[DropdownController::class, 'getcodename'])->name('getcodename');

2. 前端代码调整

首先在HTML的<head>标签内添加CSRF元标签:

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

修改JS逻辑,增加CSRF配置、完善校验和填充逻辑:

$(document).ready(function(){
    // 全局设置AJAX的CSRF头,无需每个请求单独传参
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    $('#target').change(function(){
        var code = $('#target').val().trim();
        // 空值直接清空第二个输入框
        if(!code){
            $('#codename').val('');
            return;
        }
        $.ajax({
            type: "POST",
            url: "{{ route('getcodename') }}",
            data: {code:code},
            success:function(data){
                // 有匹配值就填充,无匹配就清空输入框
                $('#codename').val(data || '');
            }
        });
    });
});

3. 控制器逻辑调整(优化查询和返回值)

public function getcodename(Request $request)
{
    // 校验参数合法性
    $request->validate([
        'code' => 'required|string'
    ]);
    // 直接取匹配的第一条记录的c_name字段值
    $codename = DB::table("communitydata")
        ->where("code", $request->code)
        ->value('c_name');
    // 直接返回字符串,前端可直接使用
    return $codename ?? '';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:21:04