Javascript JSON对象访问错误

时间:2014-02-26 10:52:01

标签: javascript json

我最近一直致力于使用JSONP创建动态感觉的phonegap应用程序。然而,我最近碰到了一堵砖墙......

以下函数用于将一些传递数据(不相关)解析为jquery mobile:

function parseProdData(results) {
    var html = '';

    for (day in results.deliveries) {
        var today = results.deliveries[day].delivery;

        var today_date_arr = today.date.split('-');
        var today_date = today_date_arr[2]+'/'+today_date_arr[1]+'/'+today_date_arr[0];

        html += '<li><a href="#">';
        html += today.delivery_day+', '+today_date;
        html += '</a></li>';
        console.log(html);
    }

    $('#JSON-list').append(html); 
    $('#JSON-list').trigger('create');    
    $('#JSON-list').listview('refresh');

}

现在所有这些看起来都很好,就像我检查控制台日志时一样:

<li><a href="#">Thursday, 27/02/2014</a></li><li><a href="#">Friday, 28/02/2014</a></li><li><a href="#">Monday, 03/03/2014</a></li><li><a href="#">Tuesday, 04/03/2014</a></li><li><a href="#">Wednesday, 05/03/2014</a></li><li><a href="#">Thursday, 06/03/2014</a></li><li><a href="#">Friday, 07/03/2014</a></li>

因此表明它正在正确访问日期和时间属性。但是,在此之后,我得到了一个未被捕获的类型错误:

Uncaught TypeError: Cannot read property 'date' of undefined

根据我对JS的理解,这应该仅在相关属性未设置时发生。正如我们从控制台中的html输出中看到的那样,并非如此,因为它被正确访问。

最后,如果我将代码限制在交付日,我会得到完全相同的错误(使用delivery_day作为'undefined'属性)。

对于那些想要它的人,下面是使用的JSON代码示例:

{
    "deliveries":[
      {
         "delivery":{
            "delivery_day":"Thursday",
            "date":"2014-02-27"
          }
      },
      {
         "delivery":{
            "delivery_day":"Friday",
            "date":"2014-02-28"
         }
      }
   ]
}

有谁知道为什么会出现这个错误?

*的 修改 * 只是说,我相当肯定错误是在顶部而不是JQuery移动元素,好像我用$('#JSON-list').append(html);注释掉块$('#JSON-list').append(<li><a href="#">Thursday, 27/02/2014</a></li><li><a href="#">Friday, 28/02/2014</a></li>);然后它工作正常,但那显然不是解决方案。

* 编辑2 * 问题只是在'deliveryies'块的末尾有一个空元素,这导致了未被捕获的错误。我没注意到它因为元素是空的。感谢@eithedog指出我正确的方向

2 个答案:

答案 0 :(得分:0)

我在result.json文件中保存了json数据,然后使用了这个

$.getJSON('result.json', function(result, status){
 var today =  result.deliveries;
 var html = "";
 $.each(today, function(key, value){      
   $.each(value, function(key, value){
      var today_date_arr = value.date.split('-');
      var today_date = today_date_arr[2]+'/'+today_date_arr[1]+'/'+today_date_arr[0];
      html += '<li><a href="#">'+value.delivery_day+', '+today_date+'</a></li>';          
  })
 })
  $('#JSON-list').append(html); 
  $('#JSON-list').trigger('create');    
  $('#JSON-list').listview('refresh');
})
.success(function(result) {}) 
.fail(function(jqXHR, textStatus, errorThrown) {
 }) 
.complete(function() {  }); 

答案 1 :(得分:0)

问题只是在'deliveryies'块的末尾有一个空元素,这导致了未被捕获的错误。我没有注意到它,因为元素是空的。

感谢@eithedog指出我正确的方向。