Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2015, 11:31
Новичок на форуме
Отправить личное сообщение для geekay Посмотреть профиль Найти все сообщения от geekay
 
Регистрация: 26.08.2015
Сообщений: 2

Очерёдность событий в разных браузерах.
Имеется функция на javascript, вызывающая скрипт php на стороне сервера. На время выполнения этого скрипта php нужно показать некое сообщение для пользователя. По какой-то причине вот этот код:
document.getElementById('text_wait').style.visibility="visible";
выполняется на Firefox, то есть я вызываю функцию, надпись становится видимой, после выполнения скрипта она исчезает.
Chrome и Vivaldi каким-то образом "оптимизируют" этот код, и интерфейс пользователя "подвисает", сообщение не появляется, пользователю страшно =) Вот полный ков функции:
<script>
function onApplyChanges(){

    document.getElementById('text_wait').style.visibility="visible";

    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            document.getElementById('text_wait').style.visibility="hidden";
            switch (xmlhttp.response){
                case "0":
                    rebootRedirect();
                    break;
                case "1":
                    alert("Ошибка! Не задан файл для распаковки.")
                    break;
                case "2":
                    alert("Ошибка! Не найден загруженный файл.")
                    break;
                case "3":
                    alert("Ошибка! Несовпадение контрольной суммы.")
                    break;
                case "4":
                    alert("Ошибка при распаковке файла.")
                    break;
                case "7":
                    alert("Ошибка! В обновлении отсутствует один или больше файлов.")
                    break;
                case "8":
                    alert("Ошибка! В обновлении файл веб-интерфейса.")
                    break;
                default:
                    alert("Неизвестная ошибка: "+xmlhttp.response);
                    break;

            }
        }
    }
    xmlhttp.open('POST', 'php/unpack.php', false);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-Form-urlencoded");
    xmlhttp.send();
};
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2015, 13:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,218

Сообщение от geekay
document.getElementById('text_wait').style.visibil ity="visible";
После этого, все остальное запускай через setTimeout().
Как вариант...

function onApplyChanges(){
    document.getElementById('text_wait').style.visibility="visible";
	setTimeout(function(){
		xmlhttp=new XMLHttpRequest();
		xmlhttp.onreadystatechange=function(){
			if (xmlhttp.readyState==4 && xmlhttp.status==200){
				document.getElementById('text_wait').style.visibility="hidden";
				switch (xmlhttp.response){
					case "0":
						rebootRedirect();
						break;
					case "1":
						alert("Ошибка! Не задан файл для распаковки.")
						break;
					case "2":
						alert("Ошибка! Не найден загруженный файл.")
						break;
					case "3":
						alert("Ошибка! Несовпадение контрольной суммы.")
						break;
					case "4":
						alert("Ошибка при распаковке файла.")
						break;
					case "7":
						alert("Ошибка! В обновлении отсутствует один или больше файлов.")
						break;
					case "8":
						alert("Ошибка! В обновлении файл веб-интерфейса.")
						break;
					default:
						alert("Неизвестная ошибка: "+xmlhttp.response);
						break;

				}
			}
		}
		xmlhttp.open('POST', 'php/unpack.php', false);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-Form-urlencoded");
		xmlhttp.send();
	},1);
};
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2015, 13:38
Новичок на форуме
Отправить личное сообщение для geekay Посмотреть профиль Найти все сообщения от geekay
 
Регистрация: 26.08.2015
Сообщений: 2

Во, спасибо! Сам придумал именно такой вариант. Мне, как сишнику, кажется кривоватым
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2015, 13:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,218

Сообщение от geekay
Мне, как сишнику, кажется кривоватым
Это нормальный подход в JS.
Поскольку скрипт выполняется однопоточно. Вот статейка на это дело...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему padding вокруг текста в разных браузерах Artem Narushevich (X)HTML/CSS 3 02.08.2013 16:51
Проблема метода indexOf() в разных браузерах! Rodger1956629 Javascript под браузер 7 31.07.2013 02:54
Срабатывание скрипта в разные моменты при загрузки в разных браузерах VitalikPro Javascript под браузер 10 29.12.2011 18:24
Проблемы с событием onmouseover в разных браузерах jsuse Общие вопросы Javascript 4 29.11.2011 18:30
Некорректная работа скрипта в разных браузерах en-k Общие вопросы Javascript 2 15.03.2011 14:54