javascript - 是什么导致我的每个循环中出现 Uncaught TypeError?
问题描述
我正在返回一个 ID 列表,用于过滤 Kendoui Grid 中的数据。Id 是使用 Ajax 从我的 MVC 应用程序中的控制器返回的,然后该函数应该遍历返回的对象,并使用过滤器相应地更新数据源。
虽然我可以从对象中获得结果,但我也会收到导致函数停止的错误。错误在于:
Cannot use 'in' operator to search for 'length' in 5
我试过使用JSON.parse
,但没有奏效。我的代码如下:
$.ajax({
url: "@Url.Action("GetTabs")",
type: "GET",
data: { 'Name' : 'John' },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
tabInfo(response);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR.status);
console.log(textStatus);
console.log(errorThrown);
}
});
function tabInfo(e) {
let filters = [];
let tags = $("#tags");
let grid = $("#CarGrid");
var idFilter = {
logic: "or",
filters: []
};
$.each(e, function (index, value) {
$.each(value, function (_, d) {
idFilter.filters.push({
field: "Id",
operator: "eq",
value: d.Id
})
filters.push(idFilter);
})
});
grid.dataSource.filter({
logic: "and",
filters: filters
});
}
在网上搜索时,看到很多帖子说是因为你需要解析返回的数据,我试图这样做,但最终得到了相同的结果。我可以看到它返回了结果,但不久之后又遇到了这个错误。
更新
阿贾克斯响应是:
{Data: Array(5), Total: 5, AggregateResults: null, Errors: null}
AggregateResults
:
null
Data
:
Array(5)
0 : {Id: 1, TabName: "Test Tab", UserName: "John", UserEmail: "John", CreatedAt: "/Date(1530867600000)/", …}
1 : {Id: 2, TabName: "Test Tab 2", UserName: "John", UserEmail: "John", CreatedAt: "/Date(1530873780000)/", …}
2 : {Id: 3, TabName: "Test Tab 3", UserName: "John", UserEmail: "John", CreatedAt: "/Date(1530874140000)/", …}
3 : {Id: 4, TabName: "Test Tab 4", UserName: "John", UserEmail: "John", CreatedAt: "/Date(1530874260000)/", …}
4 : {Id: 5, TabName: "Test Tab 5", UserName: "John", UserEmail: "John", CreatedAt: "/Date(1530874320000)/", …}
length : 5
__proto__ : Array(0)
Errors : null
Total : 5
我使用两个每个循环来提取数据不正确吗?
解决方案
查看您的 ajax 响应,我认为您不需要两个$.each
,而只是迭代response.Data
,这应该足够了
$.each(e.Data, function (_, d) {
idFilter.filters.push({
field: "Id",
operator: "eq",
value: d.Id
})
filters.push(idFilter);
});
$.each
现在,正如@collapsar 所评论的那样,如果我们在响应中得到的是 an ,则您不需要使用Array
,这也应该可以使用,但是使用Array.prototype.forEach
e.Data.forEach(function (d) {
idFilter.filters.push({
field: "Id",
operator: "eq",
value: d.Id
})
filters.push(idFilter);
});
希望能帮助到你
推荐阅读
- excel - VBA。如何从网页下载文本而不是 .csv
- java - 程序似乎没有从数组中读取数据:NumberFormatException:空字符串
- spring-boot - 在 JPA 存储库中的 findAll() 之后调用 Save()
- firebase - Unity / iOS App中的Firebase身份验证,无需电子邮件和密码
- c++ - 我有一个问题,我一直在尝试 LeetCode,需要帮助解决超出时间限制的错误
- css - CSS模板未在jsPsych中加载
- r - 基于条件的闪亮地块
- visual-c++ - 将静态本机库链接到托管 C++ 项目会在
- flutter - 当用户拖动到其开始或结束时(出现弯曲的蓝线时)如何向 ListView 添加特定操作?
- mysql - 如何在locate中使用MySql Regex?