无法遍历从AJAX请求返回的JSON

时间:2018-07-09 09:39:08

标签: jquery ajax

我在名为data的变量中返回了以下JSON

 [ 
   {"Id": 10004, "HEAD_NAME": "avcc"}, 
   {"Id": 10040, "HEAD_NAME": "tyiiio jj"}, 
   {"Id": 10059, "HEAD_NAME": "errr"}
 ]

我正在尝试使用$.each遍历整个集合,但是遇到了警报显示未定义的问题。

var url = "<?= base_url(); ?>report/get_value";
var data_sent = {'tab_value': tab_value};
$.post(url, data_sent, function(data) {
        //console.log(data);
        $.each(data, function(i, item) {
            console.log("Head value : "+item.HEAD_NAME);
        });
    });

解决方案:添加eval(data)

修改后的代码:

  $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
            console.log("Head value : "+item.head);return false;
        });

3 个答案:

答案 0 :(得分:1)

问题是因为您要返回的数据结构中没有result数组。您还可以使用在item处理函数中定义的$.each()参数访问迭代中的对象。试试这个:

var data = [ 
  { "Id": 10004, "HEAD_NAME": "avcc" }, 
  { "Id": 10040, "HEAD_NAME": "tyiiio jj" }, 
  { "Id": 10059, "HEAD_NAME": "errr" }
]

// inside the $.post callback:
$.each(data, function(i, item) {
  console.log("Head value : " + item.HEAD_NAME);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

还请注意,您不需要jQuery即可遍历数组。您可以改为使用本机forEach()方法,如下所示:

var data = [ 
  { "Id": 10004, "HEAD_NAME": "avcc" }, 
  { "Id": 10040, "HEAD_NAME": "tyiiio jj" }, 
  { "Id": 10059, "HEAD_NAME": "errr" }
]

data.forEach(function(item) {
  console.log("Head value : " + item.HEAD_NAME);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:1)

.fetchall()

更新您的foreach循环以使其如下所示

答案 2 :(得分:0)

您的json中没有节点“结果”。将data.result更改为data,它将解决您的问题

var data = [ 
   {"Id": 10004, "HEAD_NAME": "avcc"}, 
   {"Id": 10040, "HEAD_NAME": "tyiiio jj"}, 
   {"Id": 10059, "HEAD_NAME": "errr"}
 ];

  // console.log(data);
$.each(data, function(i, item) {
  console.log("Head value : " + data[i].HEAD_NAME);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

您也可以使用item代替data[i]

var data = [ 
   {"Id": 10004, "HEAD_NAME": "avcc"}, 
   {"Id": 10040, "HEAD_NAME": "tyiiio jj"}, 
   {"Id": 10059, "HEAD_NAME": "errr"}
 ];

  // console.log(data);
$.each(data, function(i, item) {
  console.log("Head value : " + item.HEAD_NAME);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>