jQuery每个循环与单个对象返回“undefined”

时间:2014-05-28 22:17:10

标签: jquery json

我有一个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会解释这一点。

2 个答案:

答案 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/