W ramach serii tłumaczeń artykułów z bloga Mozilla Hacks, przedstawiam dzisiaj tłumaczenie artykułu Synchronous XHR requests in Firefox 3.5 autorstwa Douga Turnera. Doug pracuje w Mozilli nad projektem Mobile. Oryginalny artykuł i jego tłumaczenie dostępne są na warunkach licencji Creative Commons Attribution 3.0 USA.
Synchroniczne żądania XHR w Firefoksie 3.5
Żądania XMLHttpRequest (XHR) mogą być zarówno synchroniczne, jak i asynchroniczne. Chociaż w większości przypadków korzysta się z żądań asynchronicznych, zdarza się, że możemy potrzebować żądania synchronicznego (np. w wątkach roboczych – przyp. tłum.), czyli wstrzymać dalsze wykonywanie kodu JavaScript aż do ukończenia obsługi żądania XMLHttpRequest. W Firefoksie 3 i starszych przeglądarka odpalała zdarzenia czasowe i reagowała na wprowadzanie danych podczas synchronicznego żądania XHR. W Firefoksie 3.5 i nowszych zdarzenia wprowadzania danych, takie jak ruchy myszą, oraz zdarzenia czasowe są wstrzymywane do chwili ukończenia żądania synchronicznego. Dzięki temu żądania synchroniczne są żądaniami blokującymi.
Na przykład:
function hello() { alert(“hello”); } setTimeout(hello, 20); var req = new XMLHttpRequest(); req.open('GET', 'http://www.mozilla.org/', false); req.send(null);
Przed Firefoksem 3.5 nie można było określić, czy funkcja „hello” wywołana zostanie przed czy po żądaniu XHR. Powodowało to różne problemy czasowe w aplikacjach WWW korzystających z synchronicznych żądań XHR.
Rozwiązaniem tego problemu jest wstrzymanie zdarzeń wprowadzania danych i zdarzeń czasowych do momentu powrotu z req.send
.
Więcej informacji na ten temat można znaleźć w zgłoszeniach błędów nr 340345 i 333198 dotyczących tego problemu