我有一个jQuery函数,可以调用ASP.NET Web API。我知道API成功返回客户端对象,因为我可以直接输入API URL,并且对象信息在浏览器中以XML格式显示。 JSON数据作为集合返回,jQuery循环遍历并将<option>
元素附加到<select>
元素。
我遇到的问题是如何使用jQuery来显示结果。 jQuery可以很好地显示一个对象集合,但是如果只返回一个对象,它会显示&#34; undefined&#34;对于<option>
元素。
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
$.each(data, function (key, item) {
$('#selSearchResults')
.append('<option value="' + key + '">' + item.OrgName + ' - ' + item.ID + '</option>');
})
})
.fail(function (jqXHR, textStatus, err) {
$('#ErrorMessage').text('Error: ' + err);
});
}
如果.each
函数收到data
的单个对象,是否会返回undefined?如果是这样,那么如何考虑可能包含单个对象或仅包含一个对象的结果?我认为.each
会解释这一点。
答案 0 :(得分:1)
解决!问题是返回了一个对象,当发生这种情况时,each()
函数会遍历对象的属性。解决方案是将单个对象“包装”到一个数组中,以便each()
能够正确迭代。我把这行添加到我的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);
});
}
我从以下SO article - JSON result containing only one item找到了此问题的解决方案,并查看了@CMS的答案。
答案 1 :(得分:0)
我坚信您的API会出现问题。 检查您是否实际发送了一个数组或对象,例如。
确保您的数据如下:
var data = [
{ID: 01, OrgName: "Organization1"},
{ID: 02, OrgName: "Organization2"},
{ID: 03, OrgName: "Organization3"}
];
您可以在此处播放数据:http://jsfiddle.net/lcustodio/FBdSj/