Część powyższej odpowiedzi nie działa dla mnie. Po pierwsze, na osobnej funkcji zwrotnej nie mając parametry:
xhttp.onreadystatechange = callBack; //works; the function's NAME is required
Załóżmy teraz, że funkcja zwrotna jest modyfikowany, aby otrzymać pewne parametry:
xhttp.onreadystatechange = callBack(x,m); //didn't work, and didn't know why
xhttp.onreadystatechange = createCallback(xhttp,msg); //bad part of above Answer
jednak gdzie indziej tutaj na StackOverflow ktoś wyjaśnił, że miał do czynienia z potrzebą przypisania "referencji funkcji" zamiast "wywołania funkcji" do onreadystatechange (podobnie jak NAZWA powyżej jest odniesieniem do funkcji) i wysłano rozwiązanie:
xhttp.onreadystatechange = function(){callBack(x,m);}; //works
Przyszedłem tutaj, aby dodać coś do tej drugiej odpowiedzi, ale teraz nie mogę jej znaleźć. Więc równie dobrze mogę to tutaj dodać. W moim własnym kodzie użyłem zarówno zmiennych lokalnych, jak i zmiennych globalnych, i odkryłem coś, co nie działało poprawnie, ale teraz, gdy już wiem, co się właściwie stało, Słowo Ostrzeżenia wydaje się odpowiednie. Załóżmy, „g” to zmienna globalna:
xhttp.onreadystatechange = function(){callBack(x,g);};//anonymous function works
Odniesienie funkcja jest przypisany do onReadyStateChange w pewnym momencie (T0) i funkcja wywoływana jest funkcja o nazwie w innym czasie (T1). Cóż, wartość zmiennej globalnej "g" w T1 jest wartością, która jest przekazywana do funkcji callBack, a NIE wartością "g", gdy odniesienie do funkcji zostało przypisane w T0. Nie pozwól, żeby to cię ugryzło, jakby mnie ugryzło! (Zazwyczaj zmienne lokalne nie mają tego problemu, ponieważ zazwyczaj są poza zakresem w T1, więc JavaScript musi używać ich istniejących wartości w T0, podczas ustawiania wartości parametrów anonimowej funkcji.)
Dzięki. Ta odpowiedź skłoniła mnie do nauczenia się dużo więcej o JavaScript. Naprawdę wszystko, co musiałem wiedzieć, to jak działają zamknięcia. –
http.onreadystatechange = function() { var xmlHttp = this; if (xmlHttp.status == 200) { console.log ("Mamy to!"); } }; – Abbas