Şu anda senkronize olması gereken bir Ajax çağrım var. Ancak, bu Ajax çağrısı yürütülürken, arama geri dönene kadar tarayıcı arabirimi donar. Zaman aşımı durumunda, bu tarayıcı bir significant period of time için donabilir.Bir Javascript döngüsünde iken güncellenecek bir tarayıcı penceresi almak mümkün mü?
Kullanıcı arayüzünü yenilemek için tarayıcıya (herhangi bir tarayıcıya) sahip olmanın, herhangi bir Javascript'i çalıştırmanın bir yolu var mı? İdeal olarak, kullanıcı arayüzünün yenilemesine izin veren window.update()
gibi bir komut olurdu. Bu mümkün olurdu
, o zaman ben böyle bir şeyle senkron AJAX çağrısı yerini alabilir:
obj = do_async_ajax_call();
while (!obj.hasReturned()) {
window.update();
}
// synchronous call can resume
Ben setTimeout
kullanın veya geri aramasında bir işlevi devam ettiremezsiniz nedeni olduğunu (hepsi birbirine bağlıdır çok fazla devlet değişken vardır ve long_function()
akış aksi şekilde devam ettirilmesi olurdu): yürütme akışı kesintiye edilemez
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;
}
Aramanın neden senkronize olması gerekiyor? –
Tüm arama kodunu gönderir misiniz? Bu muhtemelen basitleştirilebilir ve ihtiyacınız olanı desteklemek için XHR işlevlerini kullanabilir (jQuery bir seçenek değilse ve daha temizse bile). Eğer bir seçenek de yoksa, iĢlevi 'do_sync_jax_call();' –