2009-10-06 5 views
3

J'ai un problème avec notre navigateur bien-aimé IE (toutes les versions) et l'onglet contrôle ui de jquery. Je charge mon contenu pour les onglets avec l'option ajax. Le problème est maintenant que je dois le faire de manière synchrone de sorte que chaque demande après l'autre cause async. ne fonctionne pas pour moi ou juste très buggy. Mais ce n'est pas le problème. Le problème est que IE n'applique pas le traitement de l'état de l'ui avant de verrouiller toutes les exécutions de code sur jquery. Il semble que IE se comporte différemment de tous les autres navigateurs. C'est une sorte de cause car une fois que la requête est terminée, la classe est appliquée sur l'élément de tabulation juste pour disparaître instantanément parce que tout est fait.jquery ui async ajax request mis à faux provoque des problèmes

Quelqu'un at-il une idée de ce que cela pourrait être? problème connu ? Btw, cela fonctionne parfaitement lorsque je mets l'option asynchrone à true (vrai).

Tee

+0

J'ai eu le même problème avec IE. Il ne mettrait pas à jour l'interface utilisateur lorsque async a été défini sur true. J'ai dû retravailler mon application pour nous asynchrone. Plus compliqué et ennuyeux. –

+0

Juste pour être clair, fait-il cela avec IE8 aussi bien? –

+0

oui il le fait aussi dans IE8. Très ennuyant ! –

Répondre

3

Oui, c'est ainsi que fonctionne IE. Fondamentalement, les navigateurs fonctionnent comme ceci:

while (stillRunning()) { 
    renderDOM(); 
    getNextInputEvent(); 
    runScripts(); 
} 

En d'autres termes, vous ne recevez pas les DOM mis à jour jusqu'à ce que les scripts de finition en cours d'exécution. Maintenant, même IE mettra à jour le DOM hors séquence dans certains cas (seul un alert() ou un confirm() vient à l'esprit) mais généralement ce n'est pas le cas. D'autres navigateurs mettent parfois à jour le DOM hors séquence, et c'est ce que vous rencontrez: un cas où vos navigateurs non-IE mettent à jour le DOM bien qu'ils soient toujours bloqués dans l'étape de script-exécution (parce que vous faites un synchrone appel, il ne termine pas le script jusqu'à ce que vous obteniez la valeur de retour). Lorsque vous l'exécutez de manière asynchrone, bien sûr, le navigateur ne reste pas bloqué dans la phase d'exécution du script, il est donc libre de mettre à jour l'interface utilisateur.

C'est pourquoi la plupart des applications Web utilisent des appels asynchrones; car les faire ne gèle pas votre interface.

+0

Le problème est que la demande de synchronisation devrait être le problème. Je veux dire que vous cliquez sur l'onglet qu'il devrait appliquer le chargement après qu'il devrait commencer la demande pour éviter exactement ce problème. faire la queue de cette façon devrait le résoudre. J'ai ouvert un coché sur la page jquery mais je n'ai pas encore de réponse. –

+0

Essayez de faire quelque chose comme elem.className = "loading"; window.setTimeout (function() {startAjaxLoad();}, 0); ... si vous faites cela, IE donnera l'heure d'appliquer la classe avant d'émettre l'appel Ajax. –