Kendo Grid DataSource错误处理函数未触发问题求助
问题原因及解决办法
1. Error事件的判断条件错误
你在error回调里判断e.status === "error",但Kendo UI DataSource的error事件参数中,e.status对应的是HTTP数字状态码(比如401、500),而非字符串"error"。这个错误的判断导致即便error事件触发了,回调内的逻辑也不会执行。
解决办法:
修改判断逻辑,直接检查状态码或请求失败标识:
error: function (e) { if (e.status === 401 || e.errorThrown) { this.cancelChanges(); showToast("Error Occurred", e.xhr.responseText, "exclamation-circle", "red"); var grid = $('#grid').data('kendoGrid'); grid.dataSource._data = self.formatData(grid.dataSource.data()); grid.refresh(); } }
2. GET请求的参数序列化错误
你的parameterMap对所有操作都返回kendo.stringify(data),但GET请求的参数应该是键值对格式,而非JSON字符串。Kendo的GET请求会自动将参数拼在URL上,序列化JSON会导致请求格式异常,可能干扰错误事件的正常触发。
解决办法:
针对不同操作类型处理参数序列化:
parameterMap: function (data, operation) { // GET请求返回键值对,其他操作返回JSON字符串 if (operation === "read") { return data; } return kendo.stringify(data); }
3. 响应内容类型不匹配
前端read请求指定了dataType: "json",但服务器返回的ContentResult默认Content-Type是text/plain,Kendo尝试将纯文本解析为JSON时会失败,可能导致错误处理逻辑异常。
解决办法:
- 服务器端返回JSON格式的错误内容:
return new JsonResult() { StatusCode = 401, Value = new { Message = "No Access" } };
- 或者前端调整
dataType为"text"(如果不需要解析JSON):
read: { type: "GET", dataType: "text", url: '/api/user/getall' }
4. 检查requestEnd事件的干扰
onRequestEnd函数如果包含错误处理逻辑,可能会阻止error事件的触发。可以临时注释掉requestEnd: onRequestEnd,测试error事件是否正常触发,排查是否是该函数的问题。
内容的提问来源于stack exchange,提问作者TAD II
相关产品推荐
相关产品推荐

