我有一个函数,它获取一个Date并从JSON文件中读取事件。当Date置于事件的时间段内时,应将其添加到数组中,该数组应在函数末尾返回。
function getEvents(askDate) {
var askDate = new Date(askDate);
var result = new Array();
$.getJSON(EVENTS_JSON, function(data) {
$.each(data.events, function(key, entry) {
if(isInPeriod(askDate.setHours(0,0,0,0), new Date(entry.date[0]).setHours(0,0,0,0), new Date(entry.date[1]).setHours(0,0,0,0))) {
result.push(entry);
}
});
});
if(result.length === 0) {
result = false;
}
return result;
}
不幸的是我收到以下错误:" TypeError:result.push不是函数"。
isInPeriod函数工作正常,以前我在result.push()之前有一个控制台输出,它是JSON对象。
JSON看起来像:
{
"events": [
{
"id": 1,
"name": "Example Event",
"date": [
"2014/11/25 07:30:00",
"2014/11/25 09:00:00"
],
"desc": "Lorem Ipsum sim dolor",
"image": "http://upload.wikimedia.org/wikipedia/commons/8/84/Example.svg",
"adress": "Example Road 12",
"youtube": "https://www.youtube.com/watch?v=_5DqL5-izAY",
"tags": [
"Example"
],
"categories": [
"main_category",
"sub_category",
"sub_sub_category"
]
}
]
}
答案 0 :(得分:6)
这是由于$.getJSON
的异步性质造成的。外部函数的其余部分在循环数据的成功回调之前运行。由于外部函数的其余部分正在运行,这意味着因为:
if(result.length === 0) {
result = false;
}
result
不再是数组,因此在您尝试使用它时没有push
方法。您需要重新构建代码 - 有关详细信息,请参阅this question。