jQuery 1.5 dodaje „Odroczone obiekty”. Czym one są i co dokładnie robią?
źródło
jQuery 1.5 dodaje „Odroczone obiekty”. Czym one są i co dokładnie robią?
Obiekt odroczony
Począwszy od jQuery 1.5, obiekt Deferred umożliwia rejestrowanie wielu wywołań zwrotnych w samodzielnie zarządzanych kolejkach wywołań zwrotnych, w razie potrzeby wywoływanie kolejek wywołań zwrotnych i przekazywanie stanu powodzenia lub niepowodzenia dowolnej funkcji synchronicznej lub asynchronicznej.
Metody odroczone:
Odroczone w działaniu:
$.get("test.php").done(
function(){ alert("$.get succeeded"); }
);
$.get("test.php")
.done(function(){ alert("$.get succeeded"); })
.fail(function(){ alert("$.get failed!"); });
Wygląda na to, że istniejące wywołania zwrotne metody ajax () można połączyć w łańcuch zamiast zadeklarować w ustawieniach:
var jqxhr = $.ajax({ url: "example.php" })
.success(function() { alert("success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
Przykład roboczy z posta na blogu Erica Hyndsa : http://jsfiddle.net/ehynds/Mrqf8/
jqXHR
Począwszy od jQuery 1.5, metoda $ .ajax () zwraca obiekt jXHR, który jest nadzbiorem obiektu XMLHTTPRequest. Aby uzyskać więcej informacji, zobacz sekcję jXHR wpisu $ .ajax
ODROCZONE OBIEKTY
Wraz z przepisaniem modułu Ajax wprowadzono nową funkcję, która również została udostępniona publicznie: Odroczone obiekty . Ten interfejs API umożliwia pracę z wartościami zwracanymi, które mogą nie występować od razu (na przykład wynik zwracany przez asynchroniczne żądanie Ajax). Dodatkowo daje możliwość dołączenia wielu programów obsługi zdarzeń (coś, co nie było wcześniej możliwe w API Ajax).
Dodatkowo możesz tworzyć własne odroczone obiekty przy użyciu ujawnionego jQuery.Deferred. Więcej informacji na temat tego interfejsu API można znaleźć w dokumentacji obiektu odroczonego .
Eric Hynds napisał dobry samouczek dotyczący korzystania z Deferreds w jQuery 1.5 .
Zamiast powiedzieć ci, co robi, pokażę ci, co robi i wyjaśnię to.
Kopia powiązanego źródła jQuery 1.5 z adnotacją wyjaśniającą, co robi. Myślę, że komentarze są w większości poprawne.
Może to być korzystne
źródło
Problem solved
. Btw to źródło 1.5beta. Myślę, że są pewne zmiany w 1.6Popraw mnie, jeśli się mylę, ale ostatnio kliknęło mi, że jest to zasadniczo Asynchroniczny Moduł Run zadań. Obietnica to umowa wynikowa, zapewniająca, że otrzymasz ... coś, ale bez gwarancji, kiedy to otrzymasz.
źródło
Pracując w Javascript napotykamy na sytuację, w której wywołania funkcji są asynchroniczne. To jest przepływ funkcji Calee (powiedzmy X) nie czeka na wywołaną funkcję asynchroniczną (powiedzmy Y). Typowym przykładem jest sytuacja, gdy wywołujemy serwer w celu pobrania niektórych danych z bazy danych lub strony HTML. Jeśli te wywołania nie byłyby asynchroniczne, interfejs użytkownika utknie w oczekiwaniu na odpowiedź serwera. Ta asynchroniczna natura prowadzi do problemu, gdy chcesz wykonać pewne czynności w zamówieniu, na przykład chcesz wydrukować coś po zakończeniu wykonywania lub pobierania danych przez Y (asynchroniczne). Tutaj jQuery dostarcza nam Deffered Object. Zasadniczo jQuery zajął się całym standardowym kodem, który zwykle piszemy, aby rozwiązać tę sytuację. Oto prosty przykład:
Możesz napisać własną funkcję odroczoną (asynchroniczną)
Mam nadzieję, że to pomogło.
źródło