惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
月光博客
月光博客
Jina AI
Jina AI
F
Fortinet All Blogs
博客园 - 聂微东
The Cloudflare Blog
美团技术团队
B
Blog RSS Feed
N
Netflix TechBlog - Medium
罗磊的独立博客
The GitHub Blog
The GitHub Blog
I
InfoQ
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
阮一峰的网络日志
阮一峰的网络日志
V
V2EX

博客园 - bwteacher

tp并发操作 常用css bootstrap.table mysql实用 mysql操作错误 fastadmin操作 fastadmin下的多级联动 CentOS7安装Python3.10环境 表单提交fastadmin form jdk-24及tomcat-11.0.9(解压版)安装配置 mermaid基于 JavaScript 的图表绘制工具 HbuilderX 小随笔 v-bind和v-model的区别 v-if和v-show的区别 uniapp中@tap与@click点击事件的差异 PHP常用数学函数 距离-有这么多类 bootstrap.table汇总 selectpage汇总 jQuery没有匹配到任何内容,返回什么? js数组常用方法 thinkphp控制器名称命名相关 php常见错误码 ThinkPHP的join关联查询不使用默认的表前缀 阿里云虚拟主机创建https
fastadmin中前端表格中字段状态动态加载问题
bwteacher · 2026-07-22 · via 博客园 - bwteacher

这个问题在 FastAdmin 中比较常见,根本原因通常出在 数据格式异步加载时机 两个方面。下面帮你分析原因并给出解决方案。

searchList 在 FastAdmin 中要求的数据格式是一个 键值对对象(JSON Object),形如 {1: '是', 0: '否'}。当你改为动态获取时,"有时能用有时不行" 通常是以下几个原因导致的:

数据格式不对

后端返回的数据如果是数组(JSON Array)而不是对象(JSON Object),searchList 就无法正确解析。尤其是 PHP 中 json_encode 在数组键全是数字时,默认会编码成数组格式 [] 而不是对象 {}

关键细节:PHP 的 json_encode() 遇到纯数字键的关联数组时,会自动转成 JSON 数组,导致前端拿到的是 ["否", "是"] 而不是 {"0": "否", "1": "是"}

异步加载时机问题

$.getJSON() 是一个异步请求。如果表格在数据还没返回时就已经完成初始化渲染,searchList 拿到的就是一个未完成的 Promise 或空值,导致下拉框无法显示选项。

键的类型不一致

后端返回的键如果是整数类型(如 01),而表格匹配时用的是字符串类型(如 "0""1"),也可能导致匹配失败,表现为"数据加载了但选不了"。

方案一:后端确保返回 JSON 对象格式(推荐)

在 PHP 后端接口中,使用 JSON_FORCE_OBJECT 强制输出为对象格式:
public function getSingleList() { $list = [ 1 => __('是'), 0 => __('否') ]; // 关键:加上 JSON_FORCE_OBJECT,确保输出为 {"1":"是","0":"否"} echo json_encode($list, JSON_FORCE_OBJECT); }public function getSingleList() { $list = [ 1 => __('是'), 0 => __('否') ]; // 关键:加上 JSON_FORCE_OBJECT,确保输出为 {"1":"是","0":"否"} echo json_encode($list, JSON_FORCE_OBJECT); }

public function getSingleList()
{
    $list = [
        1 => __('是'),
        0 => __('否')
    ];
    // 关键:加上 JSON_FORCE_OBJECT,确保输出为 {"1":"是","0":"否"}
    echo json_encode($list, JSON_FORCE_OBJECT);
}

方案二:前端用 Object.assign 转换格式

searchList: Object.assign({}, Config.yourDynamicList)

方案三:使用 Function 方式动态返回

searchList 也支持传入一个函数,可以这样写:

{
    field: 'single',
    title: __('Single'),
    searchList: function() {
        var result = {};
        $.ajax({
            url: "your/controller/getSingleList",
            async: false,  // 同步请求,确保拿到数据再返回
            success: function(data) {
                result = data;
            }
        });
        return result;
    },
    operate: false,
    formatter: Table.api.formatter.status
}注意:async: false 会阻塞浏览器,数据量小且请求快的场景下可以用

public function getSingleList() { $list = [ 1 => __('是'), 0 => __('否') ]; // 关键:加上 JSON_FORCE_OBJECT,确保输出为 {"1":"是","0":"否"} echo json_encode($list, JSON_FORCE_OBJECT); }