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