Funkcja $.ajax()
działa asynchronicznie. Możesz ją odczytać tak: "Przeglądarko, zacznij wysyłać takie i takie żądanie na serwer. Gdy zostanie wysłane, serwer je przetworzy i otrzymasz odpowiedź (może to być za 10 milisekund, albo za 5 sekund), odpal mi funkcję przekazaną w opcji success
. Póki co, gdy żądanie sobie idzie, wykonaj dalsze linijki programu.".
Dalszą linijką jest u Ciebie alert()
.
Czyli tak: deklarujesz zmienne tempDate
oraz tempDateArray
. Do tej drugiej zmiennej wstawiasz pustą tablicę. Odpalasz funkcję $.ajax()
z opcjami. Przeglądarka zaczyna wykonywać żądanie. Zauważ, że kod funkcji success
NIE JEST jeszcze wykonywany. Zostanie wykonany dopiero gdy przyjdzie odpowiedź z serwera, czyli np. za parę sekund. Teraz lecimy dalej -- i wykonujemy instrukcję alert()
. Wyświetla ona wartość tempDateArray
, a tam cały czas jest pusta tablica.
Po tych paru sekundach przychodzi odpowiedź z serwera. Odpalana jest funkcja success
. Ustawiane są zmienne tempDate
oraz tempDateArray
. Ale nic już z nimi nie robisz. To tutaj, wewnątrz funkcji success
, mógłbyś wyświetlić wartość tych zmiennych. Albo odpalić funkcję, która je przetworzy. I obyłoby się bez zmiennych globalnych.
Jeśli chciałbyś mieć kod obsługi żądania w innym miejscu, mógłbyś napisać funkcję np. taką funkcję:
function handleResponse(dateArray) {
alert(dateArray);
}
I wywoływałbyś ją na samym końcu funkcji success
, o tak:
handleResponse(tempDateArray);
Obyło się bez zmiennych globalnych. Dane przekazujesz poprzez parametr funkcji.
BTW: zamiast new Array
napisz po prostu []
-- zwięźlej i bezpieczniej.