Kendo Grid无法显示,出现栈溢出错误求解决
解决Kendo Grid渲染栈溢出问题
针对你遇到的Uncaught RangeError: Maximum call stack size exceeded错误,以下是排查和解决步骤:
1. 避免重复初始化Grid
每次点击搜索按钮都会调用initializeKendoGrid重新创建Grid,重复绑定事件和初始化组件会导致内部递归调用溢出。修改初始化逻辑,优先更新数据源而非重复创建:
function initializeKendoGrid(data) { var grid = $("#grid").data("kendoGrid"); if (grid) { // 若Grid已存在,直接更新数据源 grid.setDataSource(new kendo.data.DataSource({ data: data, pageSize: 10 })); } else { // 首次创建Grid $("#grid").kendoGrid({ dataSource: { data: data, pageSize: 10 }, height: 550, groupable: true, sortable: true, pageable: { refresh: true, pageSizes: true, buttonCount: 5 }, columns: [ { field: "flightNumber", title: "Flight Number" }, { field: "airlineName", title: "Airline Name" }, { field: "origin", title: "Origin" }, { field: "destination", title: "Destination" }, { field: "date", title: "Date", format: "{0:MM/dd/yyyy}" }, { field: "departure", title: "Departure" }, { field: "arrival", title: "Arrival" }, { field: "price", title: "Price" } ] }); } }
2. 修复JSON数据格式问题
栈溢出常见原因是后端返回的JSON存在循环引用(比如实体类双向关联,如Flight与Airline互相引用),前端解析后形成无限嵌套结构,Kendo Grid处理时触发递归溢出:
- 后端序列化时添加注解排除循环引用:比如用Jackson的
@JsonIgnore标记关联字段,或使用@JsonManagedReference/@JsonBackReference处理双向关联 - 开启前端AJAX的
dataType: 'json'配置,确保jQuery正确解析JSON数据,避免将字符串当作对象处理:
$.ajax({ url: '/home/search', type: 'GET', dataType: 'json', // 取消注释该行 data: { origin: origin, destination: destination }, // ... 其余代码不变 });
3. 校验数据字段一致性
确认后端返回的JSON字段名与Grid配置的field完全匹配(比如flightNumber是否和后端返回的字段名一致,注意驼峰/下划线命名差异),字段不匹配可能引发内部解析异常。
内容的提问来源于stack exchange,提问作者Hisham Gundagi
相关产品推荐
相关产品推荐

