2014-11-25 121 views
1

我有一个函数,它获取Date并从JSON文件中读取事件。当日期位于事件的时间段内时,它应该被添加到数组中,该数组应该在函数结束时返回。将JSON对象推入数组

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

'result.events.push(entry)'? – 2014-11-25 13:43:51

回答

6

这是由于$.getJSON异步特性。外部函数的其余部分在循环数据的成功回调之前运行。由于外部函数的其余部分正在运行,这意味着因为这个:

if(result.length === 0) { 
    result = false; 
} 

result不再是一个数组,因此没有通过您尝试使用它的时候一个push方法。您需要重构代码 - 有关更多详细信息,请参见this question