Я разрабатываю веб-приложение, которое должно выполнять некоторую внутреннюю обработку, при этом информация по-прежнему отображается на экране. Очевидно, это лучше всего подходит для AJAX, который я использую. Однако перед тем, как начать запрос AJAX, я вношу несколько визуальных изменений с помощью Javascript. В частности:
document.getElementById ('calc'). InnerHTML = 'Расчет ...';
document.getElementById ('calc'). disabled = true;
Затем я вызываю сервлет через AJAX.
Это отлично работает в Firefox. Однако в Internet Explorer (версия 8) визуальные изменения никогда не вступают в силу. Приложение просто сидит в течение минуты или двух, пока обработка AJAX не будет завершена. Похоже, что код AJAX выполняется до изменения страницы, но я не знаю, почему это так.
Мы будем благодарны за любую помощь.
РЕДАКТИРОВАТЬ: Вот мои лучшие попытки в кратком, автономном, правильном примере
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<script>
var inEdit = 0;
var calcCurrent = false;
function recalc() {
var xmlhttp=new XMLHttpRequest();
if (xmlhttp==null)
{
var tmp = "Your browser does not support XML! ";
tmp += "Please contact your Technical Support division for information on how to upgrade.";
alert(tmp);
}
else
{
document.getElementById('calc').innerHTML = 'Calculating...';
document.getElementById('calc').disabled = true;
var url = "http://www.nzherald.co.nz/";
xmlhttp.open("GET",url,false);
xmlhttp.send(null);
if (xmlhttp.responseText.indexOf("Success")>=0) {
alert(xmlhttp.responseText);
}
else
alert(xmlhttp.responseText);
document.getElementById('calc').value = 'Recalculate';
document.getElementById('calc').disabled = false;
}
}
</script>
</head>
<body>
<a id='calc' class='Button' href="javascript:recalc()" >Recalculate</a>
</body>
</html>
Единственный пример проблемы с этим состоит в том, что этот URL-адрес возвращается почти мгновенно. В моем приложении он указывает на страницу, которая обрабатывает базу данных около минуты, поэтому проблема гораздо более очевидна.