Arrêter navigateur verrouillage pendant (synchrone) Ajax?

Ce que j'essaie de faire est d'ajouter un temps de chargement de l'image dans un div (de sorte que l'utilisateur sait quelque chose est en cours de chargement) et puis j'ai appeler une fonction ajax de jquery, qui est défini à "async: false". Voici mon code:

$jQuery("#playersListDiv").html(loadingImage);    
$jQuery.ajax({
         type: "POST", /* this goesn't work with GET */
         url: urlValue, /*ex: "NBAgetGamesList.php" */
         data: parameters, /*ex: "param1=hello" */
         cache: false,
         async: false,
                     success: function(data){

                     }
});

Le problème est que le navigateur de serrures et de ne pas ajouter le chargement de l'image jusqu'à ce que APRÈS l'appel ajax est en fait ce qui est inutile, bien sûr. Firefox est le seul navigateur qui fait ajoute le chargement de l'image. IE, Chrome et Safari NE PAS ajouter le chargement de l'image.

Je sais navigateur de verrouillage se produit parce que async est défini à false, mais c'est ma seule option parce que je dois attendre pour cette demande avant de passer parce que j'ai besoin des données renvoyées.

Est-il un moyen de contourner cela? Si je place une alerte après l'-je ajouter le chargement de l'image qui fonctionne, mais je ne veux pas d'une alerte popping up à chaque fois.

Synchrone, par définition, est "blocage". Comment cela va affecter les navigateurs varie, mais généralement des blocs de DOM mises à jour et de l'interaction. Faire asynchrone à "régler le problème".
Pourquoi ne pas simplement faire asynchrone et de mettre le code à exécuter après ce dans une fonction distincte. Puis appeler la fonction dans le code de retour?
"parce que j'ai besoin de données qui est retourné." C'est ce que les rappels sont pour. Votre code ne doit pas être linéaire.
mettre ce code après cela? Epacscarello, il y a une fonction de rappel. Dans ce cas, il n'est besoin d'être linéaire, parce que je suis en attente de données puis-je utiliser ces données dans le prochain bloc de code.
ce qu'ils disent (et comme indiqué dans ma réponse), c'est que vous pouvez déplacer l'ensemble du prochain bloc de code dans le succès de rappel, ou le mettre dans une fonction distincte de ce que vous appelez de la réussite de rappel, et alors que le bloc peut utiliser les données renvoyées.

OriginalL'auteur Ray | 2012-03-18