使用pageLoading选项加载jsGrid数据遇错求助
解决jsGrid loadData时
this.data is undefined的问题 是的,你必须从响应中提取并解析正确的数据格式——当前接口返回的结构和jsGrid要求的完全不匹配,这就是报错的核心原因。
数据结构差异说明
- jsGrid要求的格式:直接包含
data数组和itemsCount数值的对象 - 你的接口返回结构:一个数组 → 数组第一个元素的
data字段是JSON字符串 → 该字符串解析后才是接近要求的结构(注意里面是itemcount而非jsGrid要求的itemsCount驼峰名)
修改loadData函数的具体操作
按以下步骤处理响应数据,转换成jsGrid能识别的格式:
controller: { loadData: function (filter) { return fetch("/internal/dataPackage.XXXX") .then(response => response.json()) .then(rawData => { // 1. 取返回数组的第一个元素 const firstRow = rawData[0]; if (!firstRow?.data) { throw new Error("响应数据格式异常"); } // 2. 解析JSON格式的字符串 const parsedData = JSON.parse(firstRow.data); // 3. 转换为jsGrid要求的标准格式 return { data: parsedData.data, itemsCount: Number(parsedData.itemcount) // 转成数值类型,适配jsGrid要求 }; }) .catch((error) => { toastr["error"]("数据加载失败: " + error.message, "Error"); // 返回空结构避免jsGrid持续报错 return { data: [], itemsCount: 0 }; }); } }
关键步骤解释
rawData[0]:接口返回的是单元素数组,直接取第一个元素即可JSON.parse(firstRow.data):接口返回的data是字符串化的JSON,必须解析成对象才能读取内部数据Number(parsedData.itemcount):jsGrid要求itemsCount是数值类型,接口返回的是字符串,所以需要做类型转换
这样处理后,返回的结构完全符合jsGrid的要求,就能正常渲染数据,不会再出现this.data is undefined的错误。
内容的提问来源于stack exchange,提问作者user3685388
相关产品推荐
相关产品推荐

