Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   js в Google Chrome (https://javascript.ru/forum/css-html/48953-js-v-google-chrome.html)

makklovskiy 23.07.2014 13:48

js в Google Chrome
 
<script>
		function getXmlHttp(){
			  var xmlhttp;
			  try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			  } catch (e) {
				try {
				  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (E) {
				  xmlhttp = false;
				}
			  }
			  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
				xmlhttp = new XMLHttpRequest();
			  }
			  return xmlhttp;
		}

		function SendAllCon() {
			var xmlhttp = getXmlHttp();
			xmlhttp.open("POST", 'адрес', false);
			xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			xmlhttp.send();
			if ( xmlhttp.responseText == "4" ) {
				document.getElementById('SendAllConFast').disabled = false;
				document.getElementById('displayprogress').innerHTML = '<h1><font color="#FF0000">[ВНИМАНИЕ!] На вашем счёте не достаточно средств!</font></h1>';
				setTimeout(function(){document.getElementById('displayprogress').style.display = 'none';}, 5000);
			} else {
				if ( xmlhttp.responseText == "3" ) { 
						document.getElementById('SendAllConFast').disabled = false;
						document.getElementById('displayprogress').innerHTML = '<h1><font color="#FF0000">[ВНИМАНИЕ!] ОШИБКА!</a></font></h1>';	
						setTimeout(function(){document.getElementById('displayprogress').style.display = 'none';}, 5000);
				} else {
					if ( xmlhttp.responseText == "1" ) { document.getElementById('displayprogress').style.display = 'none'; document.getElementById('SendAllConFast').disabled = false; location.reload(); } else {  document.getElementById('displayprogress').innerHTML = xmlhttp.responseText + ' <img src="http://gruzivagon.ru/components/com_conteiner/load.gif" height="12px" />'; setTimeout(SendAllCon, 3000);  }
				}
			}
		}
		
		function SendAllConFast1() {
			var xmlhttp = getXmlHttp();
			xmlhttp.open("POST", 'адрес', false);
			xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			xmlhttp.send('autodis=' + document.getElementById('autodis').value);
			xmlhttp.responseText;
			document.getElementById('displayprogress').innerHTML = 'Отправка запроса <img src="http://gruzivagon.ru/components/com_conteiner/load.gif" height="12px" />';
			document.getElementById('SendAllConFast').disabled = true;
			document.getElementById('displayprogress').style.display = 'block';
			setTimeout(SendAllCon, 3000); 
		}

	</script>

вот код, работает хорошо, кроме Google Chrome.
В Google Chrome скрипт работает, но страница зависает пока не появится конечный результат выполнения вычислений.
Как избавится от зависания страницы Google Chrome?

Пока временное решение добавил setTimeout(SendAllCon, 3000); что бы хоть как то было видно что страница ещё жива.

WorM32 23.07.2014 14:41

Правильно, потому что вы вызываете запрос синхронно.
xmlhttp.open("POST", 'адрес', false);

в место false должно стоять true.

http://xmlhttprequest.ru/

makklovskiy 23.07.2014 15:14

Цитата:

Сообщение от WorM32 (Сообщение 322354)
Правильно, потому что вы вызываете запрос синхронно.
xmlhttp.open("POST", 'адрес', false);

в место false должно стоять true.

http://xmlhttprequest.ru/

Что за глупости вы ответили, я прекрасно знаю как и чем я передаю.
Вопрос в том, почему все браузеры правильно работают а гугл хром зависает, как убрать зависание страницы в гугле?

Переход на асинхронный режим не подходит!

MallSerg 23.07.2014 15:31

Чем отличается правильная работа от неправильной?

makklovskiy 23.07.2014 15:35

Во всех браузерах страницы не зависает, прогресс обработки данных показывает количество обработанных данных.
В хроме страница просто зависает, и прогресс обработаных данных не виден.

MallSerg 23.07.2014 15:43

что такое "прогресс обработки данных" как он выглядит ?
Это наверно вот этот вызов имеется в виду
setTimeout(function(){document.getElementById('displayprogress').style.display = 'none';}, 5000);


и вопрос в том что chrome не вызывает событие запрос.responseText ?

WorM32 23.07.2014 16:34

makklovskiy,
глупость использовать синхронные запросы и потом удивляться, почему зависает браузер.

makklovskiy 24.07.2014 07:51

Хром вызывает все события, просто сама страница при работе скрипта зависает, поэтому даже при вызове этого события
document.getElementById('displayprogress').innerHTML = xmlhttp.responseText + ' <img src="http://gruzivagon.ru/components/com_conteiner/load.gif" height="12px" />';

на странице не чего не отображается, хотя на экране должен появится ответ сервера: "Отправка запроса" -> "Получение данных" -> "Обработка данных"

Пы.Сы. WorM32, не можете помочь не разводите флуд в моей теме, идите пофлудите на другом форуме. :stop:

MallSerg 24.07.2014 09:01

Цитата:

Сообщение от WorM32
глупость использовать синхронные запросы и потом удивляться, почему зависает браузер.

полностью согласен =)

makklovskiy 24.07.2014 09:16

WorM32, MallSerg если вы два придурка нехер флудить в теме, ума нет та прошли тему стороной, а то столько потратил времени на двух недоносков объясняя им простые значения, а результат нулевой.

MallSerg 24.07.2014 09:30

Дело за малым ) найти не придурков которые смогут тебе помочь.
Но по моему медицина тут бессильна и помочь тебе уже невозможно.

Aetae 24.07.2014 09:36

makklovskiy, попробуем объяснить ещё раз: синхронный запрос останавливает абсолютно любую активность на странице до конца загрузки. Любую. Абсолютно.

Именно по этому сейчас никто не использует синхронные запросы, за редким очень специфическим исключением.

Почему в других браузерах у вас что-то работает? Скорее всего кэш. Возможно какие-то не описанные в стандарте оптимизации, сделанные для поддержки древнего говнокода.

devote 24.07.2014 09:58

Цитата:

Сообщение от WorM32
глупость использовать синхронные запросы и потом удивляться, почему зависает браузер.

полностью согласен =)

makklovskiy 24.07.2014 10:02

Зачем отнимать столько времени, что бы согласится со вторым постом?
Если спросил, значит нужен именно синхронный, и думаю есть решение что бы страницы не зависали в хроме

makklovskiy 24.07.2014 10:15

Вы нормальные? Читать не умеете? Я говорю, не про то, что во время запроса страница зависает, я про, то что она наглухо зависает во время работы всего скрипта, ХОТЯ ПОСЛЕ КАЖДОГО ОКОНЧАНИЯ ЗАПРОСА, ОНА ДОЛЖНА ВЫВЕСТИ РЕЗУЛЬТАТ НА ЭКРАН, И ТОЛЬКО ПОТОМ ПРИСТУПИТЬ К СЛЕДУЮЩЕМУ ЗАПРОСУ

Aetae 24.07.2014 10:29

makklovskiy, ну попробуй запускать каждый следующий через setTimeout()...

makklovskiy 24.07.2014 11:08

Aetae, так у меня так и реализовано, я спрашивал, может что то лучше есть.
Пы.Сы. Все надовали советов, но не кто в код 10 строчек, даже не посмотрел :-E

devote 24.07.2014 11:26

Цитата:

Сообщение от makklovskiy
Все надовали советов, но не кто в код 10 строчек, даже не посмотрел

на что там смотреть?
...
// отправка запроса
xmlhttp.send(.......);
// сюда выполнение попадет лишь после окончания выполнения .send() когда браузер получит ответ от сервера
xmlhttp.responseText;
...
И так со всеми синхронными запросами, если после одного запроса вы что-то хотите вывести и тут же делать второй синхронный запрос, то браузер приоритет отдаст вашему коду и не станет выводит ничего до окончания вашего кода... Почему так? потому что выполнение подобных:
document.getElementById('displayprogress').innerHTML = '...';
Браузер делает асинхронно (не заметно от вас), от того приоритет отдается текущему выполнению синхронного кода.

Цитата:

Сообщение от makklovskiy
я спрашивал, может что то лучше есть.

Есть, сделать код асинхронным... И не мучатся с придумыванием костылей

Aetae 24.07.2014 11:33

makklovskiy, через setTimeout должен быть вызов следующего запроса, а вывод информации через innerHTML должен идти как раз сразу.

И таки непонятно чего вы так прицепились к синхронным запросам, у вас аллергия на асинхрон? Так попейте лекарства, иначе в современном мире не выживете.

nerv_ 24.07.2014 11:47

Цитата:

Сообщение от makklovskiy
WorM32, MallSerg если вы два придурка нехер флудить в теме, ума нет та прошли тему стороной, а то столько потратил времени на двух недоносков объясняя им простые значения, а результат нулевой.

поставил минус в карму. Хз почему с тобой все еще разговаривают.
Иди туда, откуда пришел :)

makklovskiy 24.07.2014 13:15

не форум, а сборище флудаков как этот - nerv_.
По теме. Решил проблему путём - переписал скрипт с 0.

nerv_ 24.07.2014 21:03

makklovskiy, какой ты грубый https://yadi.sk/i/THoJVDa-XGpPW :)


Часовой пояс GMT +3, время: 16:26.