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

Laravel中如何通过AJAX调用控制器获取数据填充下拉选择框

步骤1:修改控制器返回JSON数据

原控制器方法没有返回值,需要将获取到的$offices以JSON格式返回给AJAX请求,可同步增加异常捕获处理接口异常:

public function offices(Request $request) {
    try {
        $url = Http::get('the_url_of_the_api', [
            'userName' => '123456',
            'password' => '345678',
        ]);
        $response = json_decode($url);
        $offices = $response->offices;
        // 直接返回JSON格式数据
        return response()->json([
            'code' => 200,
            'data' => $offices
        ]);
    } catch (\Exception $e) {
        return response()->json([
            'code' => 500,
            'msg' => '获取网点数据失败'
        ]);
    }
}

步骤2:调整视图下拉框初始结构

移除页面加载时的服务端渲染逻辑,保留空下拉框+默认提示项即可:

<select name="office" class="offices form-control">
    <option value="">请选择网点</option>
</select>

步骤3:完善AJAX逻辑实现数据渲染

增加本地缓存避免重复请求,封装渲染逻辑处理下拉框更新:

<script>
// 全局变量缓存已拉取的网点数据,避免重复发起请求
let officeCache = null;

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

    $('input[name="radio"]').click(function(){
        // 仅选中指定单选按钮时才执行逻辑,不需要可删除该判断
        if($(this).val() !== '你要触发请求的单选按钮值') return;

        // 已有缓存直接渲染,无需重复请求
        if(officeCache) {
            renderOffices(officeCache);
            return;
        }

        $.ajax({
            type: "GET",
            url: "/offices",
            dataType: "json",
            success: function(res) {
                if(res.code === 200) {
                    officeCache = res.data;
                    renderOffices(res.data);
                } else {
                    alert(res.msg || '获取数据失败');
                }
            },
            error: function() {
                alert('接口请求异常');
            }
        });
    });

    // 封装下拉框渲染公共方法
    function renderOffices(offices) {
        const $select = $('select[name="office"]');
        // 清空原有业务选项,保留默认提示项
        $select.find('option:not(:first)').remove();
        // 循环生成选项插入
        offices.forEach(office => {
            const option = `<option value="${office.name}">${office.name}</option>`;
            $select.append(option);
        });
    }
});
</script>

注意事项

请确保页面<head>标签中存在csrf的meta配置,否则AJAX请求会返回419错误:

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:15:03