2012-08-31 17 views
6

Ajax używa wywołań zwrotnych, ponieważ jest to synchronizacja A.jak zablokować wywołanie ajax (chcę to zablokować)

Chcę moje wezwanie do zdalnego bloku URL dopóki jest jakaś odpowiedź, dokładnie tak, jak w Ajax, ale bez asynchronicznego części, lub powiem Chcę nawiązać połączenie JAX.

Czy jest jakaś metoda, aby dodaje się zdarzyć (używa JQuery) (... rozwiązanie z JQuery lub czegokolwiek innego):

function get_data() { 
    $.ajax({ 
     type : "POST", 
     url : "/foo" 
    }).done(function(data, textStatus, jqXHR) { 
     return data; 
    }).fail(function(jqXHR, textStatus) { 
     return null; 
    }); 
} 

var data = get_data(); 
// process `data` 

Zastanawiam się - chcą się uczyć.

Rzeczywiście zdarzają się sytuacje, w których blokowanie do momentu, w którym odpowiednia odpowiedź byłaby odpowiednia. Nie mówię, że chcę blokować przeglądarkę, tylko środowisko uruchomieniowe skryptu.

+0

zapisu 'asynchroniczny: FALSE ajax z opcją – diEcho

+0

jQuery $ .ajax ma' własności async'. Jeśli ustawisz na false, będzie blokować. – osoner

+0

możliwy duplikat [połączeń synchronicznych z jquery] (http://stackoverflow.com/questions/2942544/synchronous-calls-w--query) - nie można blokować środowiska wykonawczego bez blokowania przeglądarki. I nie można zwrócić odpowiedzi z wywołań zwrotnych, trzeba przypisać ją do zmiennej i zwrócić ją z rzeczywistej funkcji. –

Odpowiedz

10

Po prostu można ustawić wartość logiczną async : false przy użyciu jQuery (check the docs). Weź pod uwagę: Od wersji jQuery 1.8 użycie async: false z jqXHR ($ .deferred) jest przestarzałe; musisz użyć pełnego callback/success/error callback.

Jeśli nie chcesz używać jQuery lub chcesz wiedzieć, co się dzieje pod maską, read this.

xmlhttp.open("GET","ajax_info.txt",false); 
xmlhttp.send(); 
document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 

dziwię dlaczego nie chcesz go mieć asynchroniczny chociaż ...

+1

Po pierwsze, dziękuję. Po drugie, notatka dotycząca jQuery 1.8 nie jest jasna. Ponadto, doktorzy mówią o "asynchronizmie" następujących: '.. ponieważ może to spowodować, że przeglądarka przestanie odpowiadać." Jak zatem uniknąć blokowania przeglądarki? Jest to oczywiście niedopuszczalne. – Poni

+0

W innej myśli to kolejne pytanie. Jeszcze raz dziękuję. – Poni

+0

@Poni znalazłeś odpowiedź na to inne pytanie, o którym wspomniałeś? czy utworzyłeś dla niego pytanie dotyczące stackoverflow? dbasz o link do niego? – Magne