Mam połączenie Ajax, które obecnie musi być synchroniczne. Jednak podczas wykonywania tego połączenia Ajax interfejs przeglądarki zawiesza się, aż do powrotu połączenia. W przypadku przekroczenia limitu czasu może to zablokować przeglądarkę pod kątem significant period of time.Czy można pobrać okno przeglądarki do aktualizacji w pętli Javascript?
Czy istnieje sposób na pobranie przeglądarki (dowolnej przeglądarki) w celu odświeżenia interfejsu użytkownika, ale nie można wykonać żadnego skryptu JavaScript? Najlepiej byłoby, gdyby niektóre polecenia, takie jak window.update()
, pozwoliłyby na odświeżenie wątku interfejsu użytkownika.
Jeśli będzie to możliwe, to mogę wymienić synchroniczne wywołanie AJAX z czymś takim:
obj = do_async_ajax_call();
while (!obj.hasReturned()) {
window.update();
}
// synchronous call can resume
tego powodu, że nie mogę używać setTimeout
lub wznowić funkcję w zwrotnego, jest to, że przepływ egzekucja nie może być przerwany (istnieje zbyt wiele zmiennych, że wszyscy są od siebie zależne, a przepływ long_function()
przeciwnym razie muszą być wznowione jakoś):
function long_function() {
// lots of code, reads/writes variable 'a', 'b', ...
if (sync_call_is_true()) {
// lots of code, reads/writes variable 'a', 'b', ...
} else {
// lots of code, reads/writes variable 'a', 'b', ...
}
// lots of code, reads/writes variable 'a', 'b', ...
return calculated_value;
}
Dlaczego połączenie musi być synchroniczne? –
Czy możesz opublikować cały kod połączenia? Prawdopodobnie można to uprościć i korzystać z funkcji XHR, aby obsługiwać to, czego potrzebujesz (chyba, że jQuery jest opcją, a nawet czystszym). Jeśli żadna z nich nie jest opcją, żądam zmiany nazwy funkcji na 'do_sync_jax_call();' –