Grid.MVC Ajax加载报错:Uncaught TypeError问题求助
我之前适配Grid.MVC Ajax到自己项目时,也踩过这个报错的坑,大概率是数据返回或者初始化环节出了问题,给你几个实用的排查方向:
先检查Ajax返回的数据格式
Grid.MVC对后端返回的JSON结构有特定要求,一般需要包含rows(或你配置的对应字段)数组,以及total这类统计字段。如果后端返回的JSON里没有这个数组,或者字段名和Grid配置不匹配,代码就会去读取一个undefined的length属性。
你可以打开浏览器F12开发者工具,切换到Network标签,找到Grid加载的Ajax请求,查看Response里的JSON结构,确认是否存在Grid需要的数组字段——比如是不是把data写成了result,或者后端返回的是null/空对象而非数组。核对Grid初始化的配置参数
检查你调用gridmvc()方法时的参数,尤其是数据绑定部分。如果指定了dataUrl,要确保这个接口确实返回正确格式的数据;如果是本地数据绑定,要确认传入的数据是数组类型,哪怕是空数组[],也不能是undefined或者单个对象。
举个反例:$("#grid").gridmvc({ data: undefined })这种写法肯定会触发报错,正确的应该是传入合法数组。排查jQuery版本兼容性
你用的是jQuery 3.3.1,有些旧版Grid.MVC可能对高版本jQuery的API适配不好。可以试试降级到jQuery 2.x版本,或者查下Grid.MVC的官方文档确认支持的jQuery版本范围——新版本jQuery的API变化很容易导致旧插件出现这类未定义属性的错误。确认初始化时机是否正确
一定要保证Grid的初始化代码是在DOM加载完成、且数据准备好之后执行的。比如如果是通过Ajax获取数据后再初始化Grid,必须把初始化代码放在Ajax的success回调里,不能提前执行——不然数据还没返回,Grid就会去读取undefined的属性。
错误示例:gridQuestionInit(); // 提前执行,数据还未返回 $.get("/api/data", function(data) { /* 处理数据 */ });正确写法:
$.get("/api/data", function(data) { $("#grid").gridmvc({ data: data.rows }); });临时查看报错的源码片段
报错栈指向<anonymous>:1:382,你可以在开发者工具的Sources标签里找到这段匿名代码,看看具体是哪一行在读取length。通常是遍历某个数组时,这个数组变成了undefined——比如$.each(xxx, function(){})里的xxx是undefined,就会触发这个错误。
如果按上面的步骤排查后还是解决不了,建议把后端返回的JSON结构和你的Grid初始化代码贴出来,这样能更快定位问题。
内容的提问来源于stack exchange,提问作者cnz018

