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/