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

Laravel8 调用API填充国家下拉框时编辑页已选值不显示问题

问题根因

已保存国家无法正常回显是两个逻辑漏洞导致的:

  • JS请求拿到全量国家列表后,直接用innerHTML完全替换select下的所有子节点,Blade初始渲染的带selected标记的已选国家选项被直接删除
  • 动态生成option列表时,没有匹配用户已保存的国家值给对应选项加selected属性,列表渲染完成后无默认选中项
修复方案

调整Blade模板代码

移除select里提前写的空option,通过自定义data属性存储当前用户已保存的国家值,供后续JS读取:

<div class="col-sm-9 text-secondary">
    <select id="countries" name="country" data-selected="{{ $user->country }}">
    </select>
</div>

修改前端JS填充逻辑

动态生成option时,逐一对匹配已保存国家值的选项添加selected属性,保证列表渲染完成后自动选中对应值:

document.addEventListener('DOMContentLoaded', () => {
    const selectDrop = document.querySelector('#countries');
    const savedCountry = selectDrop.dataset.selected;

    fetch('https://restcountries.com/v3.1/all')
        .then(res => res.json())
        .then(data => {
            let optionStr = '';
            data.forEach(country => {
                const name = country.name.common;
                const selectedAttr = name === savedCountry ? 'selected' : '';
                optionStr += `<option value="${name}" ${selectedAttr}>${name}</option>`;
            })
            selectDrop.innerHTML = optionStr;
        })
        .catch(err => console.log(err));
});
可选优化项
  • 可以在拿到国家列表后先按国家名称做字典序排序,提升下拉选择的使用体验
  • 控制器层不要直接返回异常对象,生产环境需要做异常捕获后返回友好提示,避免泄露服务器敏感信息
  • 模型更新逻辑建议增加字段合法性校验,拦截非法参数写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:27:20