Mianowicie choci o to że każde pobieranie danych muci być obsłuzone przez funkcje callbackową. Powoduje to znaczne pogorszenie komfortu programowania ponieważ nie możemy pobrać danych bezpośrednio do zmiennej i jednocześnie przerzucamy część logiki która owinna się znaleźć tuż przy wywołaniu do innej funkcji.
Przykład:
- Kod: Zaznacz cały
<div id="container"></div>
<script type="text/javascript">
//zamiast calkiem naturalnego
document.getElementById( "container" ).value = ajax.makeRequest( "request" );
//jesteśmy zmuszeni do bardzo nie naturalnego
function callback( response ){
document.getElementById( "container" ).value = response;
}
ajax.makeRequest( "request", callback );
</script>
Wiem że powyższy przykład wygląda całkiem niegroźnie ale przy bardziej skomplikowanych operacjach robi się już bałagan.
W pierwszym momencie rozwiązanie wydalo mi się banalnie proste. Aby zwrócić odpowiedź serwera wystaczy poczekać aż zostanie ona cała załadowana i przekazać ją dalej.
Coś w stylu:
- Kod: Zaznacz cały
do{
//jakas petla "usypiajaca"
}while(ajax.http.readyState != 4);
Okazuje sie jednak że przy takiej operacji readyState zawsze pozostaje jedynką , a nieskończona pętla wiesza przegladarki.
Przeszukałem naprawde spory kawałek sieci i nie udalo mi się znaleźć rozwiązania (oczywiście nie jest nim microsoftowski serverXMLHTTPReqquest ). Może ktoś wie jak zroić sleepa nie wieszającego firefoxa ?