






























这个问题在 FastAdmin 中比较常见,根本原因通常出在 数据格式 和 异步加载时机 两个方面。下面帮你分析原因并给出解决方案。
searchList 在 FastAdmin 中要求的数据格式是一个 键值对对象(JSON Object),形如 {1: '是', 0: '否'}。当你改为动态获取时,"有时能用有时不行" 通常是以下几个原因导致的:
后端返回的数据如果是数组(JSON Array)而不是对象(JSON Object),searchList 就无法正确解析。尤其是 PHP 中 json_encode 在数组键全是数字时,默认会编码成数组格式 [] 而不是对象 {}。
关键细节:PHP 的
json_encode()遇到纯数字键的关联数组时,会自动转成 JSON 数组,导致前端拿到的是["否", "是"]而不是{"0": "否", "1": "是"}。
$.getJSON() 是一个异步请求。如果表格在数据还没返回时就已经完成初始化渲染,searchList 拿到的就是一个未完成的 Promise 或空值,导致下拉框无法显示选项。
后端返回的键如果是整数类型(如 0、1),而表格匹配时用的是字符串类型(如 "0"、"1"),也可能导致匹配失败,表现为"数据加载了但选不了"。
在 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)
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); }
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。