JSON 返回未定义

JSON Returning Undefined

本文关键字:未定义 返回 JSON      更新时间:2023-09-26

我一直在尝试通过jQuery/AJAX读取JSON,但到目前为止,它一直返回未定义。

$.ajax({
    type: "POST",
    url: "php/ajax/retrieve.php",
    dataType: "json",
    success: function(data) {
      console.log(data);
      $("#items").html(data);
      $.each(data, function(key, val) {
        console.log(key + ' ' + val);
        $("#items").append(''
          <div class="item-section" id="' + key + '">'
          <div class="item">'
            <h3>' + val.current_status + '</h3>'
          </div>'
          </div>'
        ');
      });
    }
  });

在控制台内部,迭代中日志的输出如下所示,但是当我尝试在HTML中添加val.current_status时,它只是说"未定义":

0 {"id":"4","creation_date":"15 Jan 2015 - 07:32 AM","current_status":"Pending", [... and so on]

任何帮助,不胜感激。

如果您的控制台输出" {"id":"4","creation_date":"15 Jan 2015 - 07:32 AM","current_status":"Pending"... ",那么您的"对象"是一个字符串,而不是 JSON 对象。查看下面的示例。您应该在控制台窗口中看到" [object Object] "。

我的猜测是,您的服务器在某个时候不小心将 JSON 转换为字符串值,并带有转义的引号等。也许您以某种方式调用了 JSON 序列化程序两次?

这就是您不应尝试在控制台中将数据转换为字符串的原因。你把它想象成一个 C 控制台,其中所有内容都必须是一个字符串才能理解它。浏览器控制台比这更智能,更具交互性......您应该输出实际值,以便您可以看到其类型并使用属性等:

console.log( key, val );

  var key = 0,
      val_str = "{'"id'":'"4'",'"creation_date'":'"15 Jan 2015 - 07:32 AM'",'"current_status'":'"Pending'"}",
      val_obj = {"id":"4","creation_date":"15 Jan 2015 - 07:32 AM","current_status":"Pending"};
  $( '#str' ).text( key + ' ' + val_str );
  $( '#obj' ).text( key + ' ' + val_obj );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="str"></div>
<div id="obj"></div>

迭代对象数组

$.each(data, function(i, val) {
    $.each(val, function(k, v) {
        // do something 
    });
});