我最近一直致力于使用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指出我正确的方向
答案 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指出我正确的方向。