powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / javascript, периодический рефреш контента в div через ajax
15 сообщений из 15, страница 1 из 1
javascript, периодический рефреш контента в div через ajax
    #37845537
Юрий321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет!

как грамотно сделать такой перидический опрос и обновление?

нужно

1) запрос
2) ждем ответа или выжидаем таймаут (если проблемы сети и хттп-сервера)
3) обновляем див
4) переход на пункт 1

воткнуть просто таймер через setInterval не вариант, при проблемах с сетью запросы копятся лавинообразно, до исчерпания лимита подключений хттп-сервера.
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845549
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий321воткнуть просто таймер через setInterval не вариант, при проблемах с сетью запросы копятся лавинообразно, до исчерпания лимита подключений хттп-сервера.
Есть еще setTimeout...
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845561
Юрий321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЮрий321воткнуть просто таймер через setInterval не вариант, при проблемах с сетью запросы копятся лавинообразно, до исчерпания лимита подключений хттп-сервера.
Есть еще setTimeout...

вот так?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
function showContent(link, divtarget) {

    var cont = document.getElementById(divtarget);

    var http = createRequestObject();
    if( http )
    {
        http.open('get', link);
        http.onreadystatechange = function ()
        {
            if(http.readyState == 4)
            {
                cont = http.responseText;
                setTimeout('showContent(link, divtarget)', 3000);
            }
        }
        http.send(null);
    }
    else
    {
        cont.innerHTML = 'Ошибка сети';
        setTimeout('showContent(link, divtarget)', 3000);
    }
}



тут два вопроса

1) код события закрывается? или нет, и с каждым запуском отжирается память?

2) оно работает только при первом вызове, т.е. снаружи
когда функция вызывается изнутри, то получаем link is not defined

теряется контекст? как корректно сделать?
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845563
Юрий321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий321,

cont = http.responseText;

тут

cont.innerHTML = http.responseText;
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845615
Код: sql
1.
if(http.readyState == 4)


и как сработает setTimeout если стэйт будет 3? ;)
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845624
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий321,

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function showContent(link, divtarget) {
	var cont = document.getElementById(divtarget);
	(function _f() {
		var http = createRequestObject();
		if( http ) {
			http.open('GET', link, true);
			http.onreadystatechange = function () {
				if (http.readyState == 4) {
					cont.innerHTML = (http.status == 200) ? http.responseText : 'Ошибка сети';
					setTimeout(_f, 3000);
				}
			};
			http.send(null);
		} else {
			cont.innerHTML = 'Ошибка сети';
			setTimeout(_f, 3000);
		}
	})();
}
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845639
блиин!
Код: sql
1.
2.
3.
4.
var http = createRequestObject();
		if( http ) {
} else {
			cont.innerHTML = 'Ошибка сети'; // отсутствие RequestObject - это не ошибка сети!!!
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845724
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий321вот так?
Сделать тестовый пример я не смогу... Т.к. с аджакс не работал...
Но суть идеи следущая.
Нужно запускать setTimeout только когда данные получены и ДИВ обновлен. Т.о. никакого "накопления" и "наслоения" событий не наступит...
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845734
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий321когда функция вызывается изнутри, то получаем link is not defined
Неправильно ты, Дядя Фёдор, презерватив одеваешь... Нужно нужно пупырышками внутрь, чтоб самому приятней было (с)

Код: javascript
1.
2.
3.
setTimeout(function (){
   showContent(link, divtarget)
}, 3000);
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845748
Юрий321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так...блиин!
Код: sql
1.
2.
3.
4.
var http = createRequestObject();
		if( http ) {
} else {
			cont.innerHTML = 'Ошибка сети'; // отсутствие RequestObject - это не ошибка сети!!!



я знаю :) руки по привычке вписали
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37845751
Юрий321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

спасибо!

сейчас потестим с таймаутами.
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37847369
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий321воткнуть просто таймер через setInterval не вариант, при проблемах с сетью запросы копятся лавинообразно , до исчерпания лимита подключений хттп-сервера.Ниче они не копятся лавинообразно, это самообман.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var my_interval=null;
...
if (my_interval==null) my_interval=setInterval(function(){my_onReadyStateChange();},100);
...

function my_onReadyStateChange() {
var ret,st,t;
try {
	if (pb_xmlHttp.readyState==4)
	{
		if(my_interval)clearInterval(my_interval);
		my_interval=null;
		...
	}
} catch (e) { ... }
}
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37847374
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То-есть пока не выполнится этот запрос, повторный не удастся отправить.
Для параллельного выполнения другого ajax-запроса используйте переменную my_interval2 и, возможно, функцию my_onReadyStateChange2()
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37847380
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, забыл дописать вначале кода var pb_xmlHttp= createRequestObject();
(имя переменной случайное попалось).
...
Рейтинг: 0 / 0
javascript, периодический рефреш контента в div через ajax
    #37847435
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий321,

опять забыл, обязательно еще в блоке обработки ошибок надо сделать:
Код: javascript
1.
2.
3.
4.
5.
catch (e) {
	if(my_interval)clearInterval(my_interval);
	my_interval=null;
	...
}
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / javascript, периодический рефреш контента в div через ajax
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]