test.php Код (PHP): <?php if( isset( $_GET['ajax'] ) ) { sleep(rand(1,3)); echo $_GET['ajax']; exit; } ?><html><head> <title>ru.php.37214-1</title> <script language="javascript" src="./jquery-1.7.1.min.js" type="text/javascript"></script> <script language="javascript" src="./ajax.js" type="text/javascript"></script> </head><body> [url="#"]press me[/url] <div id="jrn">fillme</div> </body></html> ajax.js Код (Text): function ajax_get(i) { rt = ''; $.ajax({ url: './test.php?ajax='+i, type: 'GET', async: false, cache: false, timeout: 10000, success: function(data){ rt = data; } }); return rt; } function ajax() { $("#btn").html('wait...'); $("#jrn").css('color','grey'); $("#jrn").html(ajax_get(1)); $("#jrn").html(ajax_get(2)); $("#jrn").html(ajax_get(3)); $("#jrn").html(ajax_get(4)); $("#jrn").html(ajax_get(5)); $("#jrn").css('color','red'); $("#btn").html('press me'); return false; } тынц-онлайн одновременно только один запрос к серверу. у всех все нормально, хром продолжает думать до победного.
Ну, есть предположение, примерно такое: когда свойству innerHTML некоторого объекта присваивается новое значение - то присвоение-то происходит сразу, но отрисовка его на экране происходит отдельно после изменения значения этого свойства. Видимо, гуглохром пытается одновременно выполнять дальнейший JavaScript-код и заниматься перерисовкой картинки после изменения innerHTML. Однако запросы синхронные, то есть во время запроса браузер полностью блокируется. И, в том числе, блокируется функция, которая перерисовывает картинку. В итоге получается, что между запросами - свойство innerHTML у объекта изменилось, но на экране мы этого не видем. Поставь после каждого такого Код (Text): $("#jrn").html(ajax_get(Х)); вызов ещё какой-либо функции, останавливающей выполнение JavaScript. Например, alert(); : Код (Text): $("#jrn").html(ajax_get(1)); alert(document.getElementById('jrn').innerHTML); $("#jrn").html(ajax_get(2)); alert(document.getElementById('jrn').innerHTML); $("#jrn").html(ajax_get(3)); alert(document.getElementById('jrn').innerHTML); $("#jrn").html(ajax_get(4)); alert(document.getElementById('jrn').innerHTML); $("#jrn").html(ajax_get(5)); Тут ты увидешь, что если не блокировать работу браузера синхронными запросами сразу друг за другом - то он успеет всё на экране перерисовать. В других браузерах, видимо, после изменения innerHTML сразу происходит перерисовка и пока она не произойдёт дальнейшие инструкции JavaScript не выполняются. Либо же синхронные запросы в них не блокируют "перерисовщик". Но это лишь предположение, конечно. Как выход из ситуации - не юзать синхронные запросы, а использовать асинхронные. Но код, естественно, при этом должен существенно измениться.