2014-11-25 145 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