jQuery DataTables搜索时出现Error 500及Ajax错误,求代码排查
排查DataTables Ajax错误的几个关键点
从你遇到的DataTables warning: table id=grid - Ajax error来看,这个错误通常和Ajax请求失败或者服务器返回的数据格式不符合DataTables要求有关,结合你的代码,我梳理了几个可能的问题点:
1. 语法错误导致JS执行中断
看你第三个列的mRender函数,这里有明显的语法错误:
{ "mRender": function (data, type, row) { var xxx = $scope.name1 = $filter("jalaliDateFromNow")(row["createdDate"]); return "<span>" + $filter("jalaliDateFromNow")(row["orderCreationTime"]); +'</span>'; }, "orderable": true },
注意row["orderCreationTime"])后面多了一个分号,这会导致JavaScript解析失败,直接中断DataTables的初始化流程。修正后应该是:
{ "mRender": function (data, type, row) { var xxx = $scope.name1 = $filter("jalaliDateFromNow")(row["createdDate"]); return "<span>" + $filter("jalaliDateFromNow")(row["orderCreationTime"]) + '</span>'; }, "orderable": true },
另外,这里定义的xxx变量没有被使用,属于冗余代码,可以考虑删掉。
2. Ajax请求的有效性问题
你的Ajax配置使用了GET请求并携带Authorization头,需要确认几个点:
serviceBase + "/Auth/Admin/SearchOrders2/"这个URL是否正确?有没有拼写错误?可以在浏览器开发者工具的Network标签里查看这个请求的状态码(比如404表示地址不存在,401表示未授权)。localStorageService.get("authorizationData").token是否能正确获取到有效的token?如果token过期或者不存在,会导致请求被服务器拒绝,返回401错误。- 服务器是否允许GET请求携带Authorization头?有些后端框架对GET请求的头信息有特殊限制,或者需要配置CORS(如果是跨域请求的话)。
3. 服务器返回的数据格式不符合要求
因为你开启了serverSide: true,DataTables要求服务器返回的数据必须包含以下几个核心字段:
draw: 和请求中的draw参数一致的整数,用于同步请求和响应recordsTotal: 总记录数(未过滤前)recordsFiltered: 过滤后的记录数data: 实际的表格数据数组
如果服务器返回的JSON缺少这些字段,或者格式不正确,DataTables就会触发Ajax错误提示。你可以在Network标签里查看请求的Response内容,确认是否符合这个结构。
4. 额外的细节检查
- 你使用了AngularJS的
$filter和$scope,但DataTables的初始化代码是否运行在AngularJS的上下文里?如果是在AngularJS外部调用,$filter和$scope会无法获取到,导致执行错误。 - 语言文件
/translate/datatables.fa-IR.json是否能正常加载?如果这个文件加载失败,也可能间接影响DataTables的初始化(不过这个通常不会触发Ajax错误,但可以一并检查)。
你可以先从修正语法错误开始,然后用浏览器开发者工具查看Network请求的具体情况,这样能快速定位到问题所在。
内容的提问来源于stack exchange,提问作者Kalagar
相关产品推荐
相关产品推荐

