$.getJSON
работает асинхронно, что означает, что все, что вы указали в обратном вызове, будет выполнено в конце концов, но нет никакой гарантии, что это произойдет к тому времени, когда вы достигнете alert('pending_dates')
.
Вы можете проверить это, нажав alert('pending_dates')
сразу после
pending_dates.push()
(это приведет к отображению одного предупреждения для каждого извлекаемого элемента).
Вы можете написать функцию, чтобы начать работу с данными, которые вы извлекаете, как только они станут доступны:
var pending_dates = [];
$.getJSON('/ajax/event-json-output.php', function(data) {
$.each(data, function(key, val) {
pending_dates.push({'event_date' : val.event_date});
doSomething(val.event_date);
});
});
function doSomething(date) {
// do something with date
// like writing it to the page
// or displaying an alert
}
С этим вы сможете работать со всеми данными, которые вы получаете, когда они становятся доступными.