Salve a tutti, sono nuovo del Forum e ho un problema con ajax che non riesco a risolvere. In pratica io eseguo una funzione javascript che fa una chiamata ajax di tipo sincrono, la quale interroga una servlet e al success mette dentro un div una tabella HTML. Però, prima
di fare questa chiamata, nello stesso div devo caricare un'immagine animata di loading che indica all'utente che la richiesta è in fase di elaborazione.
Qui sotto c'è il codice


<script>
function loadLista()
{
/* immagine di loading nel div con id = lista*/

document.getElementById('lista').innerHTML = '[img]images/ajax-loader.gif[/img]</img>';

/*imposto il timeout prima di chiamare la funzione load(), che è la funzione che effettua la
chiamata ajax; poi faccio il clearTimeout*/

var t = setTimeout("load();", 1);
clearTimeout(t);
}

function load()
{
/*chiamata ajax sincrona col prototype*/

var url = servletUrl;
new Ajax.Request(url, {
asynchronous: false,
method: 'post',
onSuccess: success,
onFailure: failure,
parameters: some parameters });

function success(xhr)
{ /*terminata l'elaborazione, metto nel div lista la tabella che mi faccio restituire
dalla servletUrl*/
document.getElementById('lista').innerHTML = xhr.responseText;
}

function failure()
{
alert("Request Failure");
}
}

</script>

Sostanzialmente il problema è questo:
se faccio la chiamata asincrona, tutto funziona a dovere e non ho bisogno di impostare alcun timeout prima della chiamata ajax, sicchè mi mostra prima l'immagine animata e alla fine la lista.
Se invece faccio una chiamata sincrona, il dilemma è il seguente:
-se non imposto il timeout, alla fine dell'elaborazione mi mostra la lista ma non mi fa vedere
l'immagine, ovvero non mi mostra quello che io gli chiedo prima della chiamata.
-se invece imposto il timeout, mi mostra prima l'immagine e successivamente la lista, ma
l'immagine viene mostrata come statica, perdendo la sua natura dinamica. In altre parole, il
setTimeout interferisce con l'animazione e tratta tutto come testo statico, ma senza il timeout, ovvero senza un'interruzione forzata del codice, non riesco a visualizzare la parte
prima della chiamata.

Ribadisco che questo accade con la chiamata sincrona e con IE e Chrome, mentre con FF
non serve li timeout. Io devo per forza usare la chiamata sincrona e mettere l'immagine
animata, e per quanto abbia provato non ho trovato una soluzione. Qualcuno mi sa dare
dei suggerimenti? Grazie anticipatamente