Alternatywy dla synchronicznego kodu XMLHttpRequest w JavaScript (jako przekroczenie limitu czasu w Safari)

Wersja skrócona: Szukam metody oczekiwania na żądanie Asynch XHR lub sposób na uzyskanie Synch XHR w Safari.

Znacznie dłuższa wersja: pracuję nad usługą internetową, która używa różnych zewnętrznych źródeł danych połączonych razem. Używam frontonu Javacript, który wywołuje wywołania AJAX / XHR do mojego kodu serwera PHP. Nie występują problemy między zakładami, ponieważ klient żąda tylko danych z mojego serwera (serwer wykonuje żądania danych zewnętrznych).

Używam synchronicznego żądania XHR, ponieważ mam pewne przetwarzanie po obciążeniu (sortowanie, filtrowanie itp.), Aby zrobić to na danych, zanim zostanie on przedstawiony na ekranie.

To wszystko działa poprawnie w IE, FF i Operze, ale wydaje się być problemem dla Safari (jeszcze nie próbowałem Chrome).

Korzystając z Firebug dla Safari na moim komputerze z systemem Windows, widzę, że serwer wywołał beng, a następnie kończy się niepowodzeniem po upływie ponad 10 sekund. Na moim iPadzie komunikat jest nieco lepszy, ponieważ mówi: NETWORK_ERR: XMLHttpRequest Wyjątek 101: Wystąpił błąd sieci w trybie synchronicznym.

Trochę badań wskazuje, że Safari wygaśnie po 10 sekundach w trybie synchronizacji. Wydaje się, że istnieje funkcja limitu czasu, której funkcję limitu czasu można użyć, aby ją rozszerzyć (z maksymalnym limitem dla Safari 60 sekund). Niestety nie mogę tego zrobić.

Zastanawiam się teraz, co ludzie sugerowaliby jako najlepszy sposób obejścia tego problemu poprzez zmiany w kodzie Javacript klienta.

Dwie opcje, o których myślę, to (i) znalezienie działającego przykładu synchronizowanego limitu czasu XHR, który będzie honorowany przez przeglądarki Safari; lub (ii) mieć jakieś opakowanie wokół asynchronicznego wywołania XHR, tak aby przetwarzanie po obciążeniu czekało najpierw na ładowanie.

Nie jestem szczególnym doświadczonym hakerem JavaScript, ale ustaliłem sporą kwotę na ten projekt. Nie używałem JQuery ani żadnych innych frameworków i wolałbym trzymać się surowego JS tylko po to, aby uniknąć konieczności uczenia się dodatkowej składni. [Możesz zobaczyć z moich poprzednich postów próbowałem używać JQM i Spry w przeszłości, ale oba okazały się złymi wyborami, przynajmniej na tym etapie i od tego czasu zostały porzucone].

Mam wrażenie, że wywołanie zwrotne może być właściwą opcją oczekiwania na asych, ale nie jestem pewien, jak to działa lub jak byś je kodował.

To jest tylko prototyp na tym etapie, więc brudne hacki są dopuszczalne. Pełne ponowne zapisanie jest już dostępne na kartach, gdy będę miał sprawdzoną funkcjonalność.

Doceniaj ludzkie myśli i porady na ten temat.

Pozdrawiam, Pete.

questionAnswers(1)

yourAnswerToTheQuestion