JSON值显示NaN

时间:2017-01-20 14:01:55

标签: javascript jquery json ajax

在使用$ .each方法检索JSON数组数据时,我能够获取数组值,但除此之外,它还显示了NaN'值并显示以下错误。

"未捕获的TypeError:无法在'中使用'运营商搜索' 5'你好!"

似乎它循环遍历所有对象而不仅仅是数组,如果是这种情况,我怎样才能获得数组值以及如何获取所有值(包括和排除数组值)。

rawgit 的另一个查询仅适用于方法&#39; GET &#39;,因为使用方法&#39; POST < / EM>&#39;投掷错误(403(禁止))。

this.itemRecordBindingSource.Filter = string.Format("date >= '{0:yyyy-MM-dd}' AND date < '{1:yyyy-MM-dd}'", date, plus);

JSON:

    $.ajax({ 
                method: 'GET', 
                url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
                dataType: 'json',
                success: function (data) { 
                    $.each(data, function(index, obj){
                        $.each(obj, function(index, element) {
                            $('#show-data').append(element.key + element.value + '<br/>');
                        });             
                    });
                }
           });

6 个答案:

答案 0 :(得分:1)

听起来你只想迭代data.items,但你要迭代一切。试试这个:

$.each(data.items, function(index, obj) {
  $('#show-data').append(obj.key + obj.value + '<br/>');
});

https://jsfiddle.net/rrsku4Lq/

答案 1 :(得分:1)

问题是当第二个循环到达"message": "Hello!"时,这不是再次循环的对象,因此对于该元素,只需要第一个循环。

要更正,只有在obj是对象的情况下才输入if语句才能进入第二个循环 我还将嵌套循环index名称更改为index2

$.each(data, function(index, obj){
    // Only do nested loop if obj is Object
    if (obj instanceof Object) {
        $.each(obj, function(index2, element) {
            $('#show-data').append(element.key + element.value + '<br/>');
        });             
    }
});

如果您只对data.items感兴趣,那么您可以使用

$.each(data.items, function(index2, element) {
    $('#show-data').append(element.key + element.value + '<br/>');
});             

答案 2 :(得分:1)

你有一个不必要的for循环。响应是您的案例中的一个JSON对象。您只需要迭代数据项。更新:您如何处理响应取决于您想要完成的任务。在实践中,您通常知道如何从响应中访问所需的数据,但正如其他人所建议的那样,您可以遍历响应对象中的键并检查类型

&#13;
&#13;
var object = {
  arr : [1,2,3],
  nestedObject : { }
};

for (var key in object) {
  console.log(key);
  console.log('Is array? ' + Array.isArray(object[key]));
  // Now you can handle the data based on it's type...
}
&#13;
&#13;
&#13;

在这种情况下,您可以选择期望响应包含items密钥并对其进行迭代。 (验证您可以处理响应也是一种很好的做法)

&#13;
&#13;
 $.ajax({
   method: 'GET',
   url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
   dataType: 'json',
   success: function(data) {
     // data is your JSON object.
     data.items.forEach(function(item) {
       $('#show-data').append(item.key + item.value + '<br/>');
     });
   }
 });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="show-data"></div>
&#13;
&#13;
&#13;

此外,403表示为当前用户阻止了资源。验证您的POST方法是否可公开访问,以及您是否有权发出请求。

答案 3 :(得分:0)

你应该首先解析json。正如@Jason P所说,迭代data.items

$.ajax({ 
        method: 'GET', 
        url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
        dataType: 'json',
        success: function (data) { 
            var parsedData = $.parseJSON(data);
            $.each(parsedData.items, function(index, obj){
                $.each(obj, function(index, element) {
                    $('#show-data').append(element.key + element.value + '<br/>');
                });             
            });
        }
});

答案 4 :(得分:0)

您正在循环遍历数组中的所有元素。我认为你只需要遍历&#39;项目&#39; element仅作为该元素包含&#39;键&#39;和&#39;价值&#39;元件。

即使您这样做,也可以检查key和value元素是否存在,如果存在,请执行您的代码所需的任何内容。

           $.ajax({ 
                method: 'GET', 
                url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
                dataType: 'json',
                success: function (data) 
                { 
                    $.each(data, function(index, obj)
                    {
                        $.each(obj, function(index, element) 
                        {
                            if(element.hasProperty('key') && element.hasProperty('value'))
                                 $('#show-data').append(element.key + element.value + '<br/>');
                        });             
                    });
                }
           });

答案 5 :(得分:0)

$.ajax({ method: 'GET', url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json', dataType: 'json', success: function (data) { console.log(data.items); $.each(data.items, function(index, element) { $('#show-data').append(element.key + element.value + '<br/>'); }); } });