jQuery带有单个对象的每个循环返回“未定义”
我有一个jQuery函数,可以调用ASP.NET Web API。我知道API成功地返回了一个客户端对象,因为我可以直接输入API url,并且对象信息以XML格式显示在浏览器中。JSON数据作为集合返回,jQuery循环并将元素附加到元素中 我遇到的问题是如何使用jQuery显示结果。jQuery可以很好地显示对象的集合,但是如果只返回一个对象,它会为元素显示undefinedjQuery带有单个对象的每个循环返回“未定义”,jquery,json,Jquery,Json,我有一个jQuery函数,可以调用ASP.NET Web API。我知道API成功地返回了一个客户端对象,因为我可以直接输入API url,并且对象信息以XML格式显示在浏览器中。JSON数据作为集合返回,jQuery循环并将元素附加到元素中 我遇到的问题是如何使用jQuery显示结果。jQuery可以很好地显示对象的集合,但是如果只返回一个对象,它会为元素显示undefined 如果.each函数接收到单个数据对象,是否返回未定义?如果是这样,那么如何解释可能包含单个对象或仅包含一个对象的结果
如果.each函数接收到单个数据对象,是否返回未定义?如果是这样,那么如何解释可能包含单个对象或仅包含一个对象的结果?我认为。每个都会解释这一点。我坚信您的API出了问题。 检查是否确实发送了数组或对象,例如 确保您的数据如下所示: 风险值数据=[ {ID:01,OrgName:Organization1}, {ID:02,OrgName:Organization2}, {ID:03,组织名称:Organization3} ];
您可以在此处使用数据:已解决!问题在于返回的是单个对象,当这种情况发生时,每个函数都会迭代对象的属性。解决方案是将单个对象包装到一个数组中,这样每个对象都能够正确地迭代。我在jQuery中添加了这一行
if (!jQuery.isArray(data)) data = [data]; // If a single object is returned, wrap it in an array
在这里,它是在整个功能
function searchClients() {
var uri = 'api/clients';
var searchParam = $('#SearchTerm').val();
$.getJSON(uri + '/' + searchParam)
.done(function (data) {
$('#selSearchResults').show(); // Displays hidden select element
$('#selSearchResults').html(""); // Clear any pre-existing data in select element
if (!jQuery.isArray(data)) data = [data]; // If a single object is returned, wrap it in an array
$.each(data, function (key, item) {
$('#selSearchResults')
.append('<option value="' + key + '">' + item.OrgName + ' - ' + item.ID + '</option>');
})
})
.fail(function (jqXHR, textStatus, err) {
$('#ErrorMessage').text('Error: ' + err);
});
}
我从以下内容中找到了此问题的解决方案,并查看了中的答案。然后首先检查返回的数据是集合还是单个对象。或者更确切地说,请确保请求数据的端点始终提供数组/对象,而且不仅仅是一个值–行为应该是一致的。您确定数据[1].item.OrgName具有值吗?在我看来,OrgName和ID是undefined@WereWolf@CBroe@-每个对象是否都会使用单个对象进行迭代?在遍历之前,是否总是必须检查结果对象集合是否有一个或多个成员?我希望在示例中看到更多,因为对于查询,人们不知道可以返回多少个结果。我可以确认,在这种情况下,API返回的是单个对象。我只是不明白为什么。即使集合中只有一个对象,每个对象也不会迭代一次。
function searchClients() {
var uri = 'api/clients';
var searchParam = $('#SearchTerm').val();
$.getJSON(uri + '/' + searchParam)
.done(function (data) {
$('#selSearchResults').show(); // Displays hidden select element
$('#selSearchResults').html(""); // Clear any pre-existing data in select element
if (!jQuery.isArray(data)) data = [data]; // If a single object is returned, wrap it in an array
$.each(data, function (key, item) {
$('#selSearchResults')
.append('<option value="' + key + '">' + item.OrgName + ' - ' + item.ID + '</option>');
})
})
.fail(function (jqXHR, textStatus, err) {
$('#ErrorMessage').text('Error: ' + err);
});
}