Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Обновление данных на страницы без перезагрузки страницы / 16 сообщений из 16, страница 1 из 1
16.06.2014, 15:44
    #38670625
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Есть скрипт на PHP примерно такого вида:
Код: php
1.
2.
3.
<div id="data">
<? include('result.php'); ?>
</div>


Файл result.php результатом своего выполнения выдает заполненную таблицу (TABLE).

Содержимое этой таблицы я хочу автоматически обновлять раз в минуту.
При этом делать refresh страницы раз в минуту делать бы не хотелось.

Насколько я понимаю, я могу js-скриптом запросить с сервера result.php и содержимое запроса подставить в качестве innerHTML в элемент div#data. Но я так раньше не делал, не поделитесь скелетом или примером такого решения?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
16.06.2014, 15:54
    #38670642
Gustly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.,

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
xhr = new XMLHttpRequest();
xhr.open("GET", 'result.php', true);
xhr.onreadystatechange = function() {
		if (xhr.readyState!=4) return
		if (xhr.status==200) {
			$('#my_div').html(xhr.responseText);
				}
			)
		}
	}
xhr.send(null);
...
Рейтинг: 0 / 0
16.06.2014, 16:25
    #38670680
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
А без JQuery можно?
Я сделал так:
Код: 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.
...
<body onload="setTimeout(refreshSession,1000)">
...
function httpGet(url)
{
	var xmlHttp = null;
	xmlHttp = new XMLHttpRequest();
	xmlHttp.open("GET", url, false);
	xmlHttp.send(null);
	return xmlHttp.responseText;
}
function refreshSession()
{
	div = document.getElementById('session');
	if (div)
	{
		res = httpGet("/?request=session");
		if (res)
		{
			div.innerHTML = res;
		}
	}
	setTimeout(refreshSession,1000);
}


Страница обновляется два раза и перестает обновляться.
Что неправильно?
...
Рейтинг: 0 / 0
16.06.2014, 16:30
    #38670689
Gustly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.,

Консоль в помощь. Возможно там ошибки.
...
Рейтинг: 0 / 0
16.06.2014, 16:45
    #38670706
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Нет, оказалось что это результат просто кешировался.
Хотя в htaccess указано:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<Files "*.php">                                                                                                                                                                              
  FileETag None                                                                                                                                                                              
  <ifModule mod_headers.c>                                                                                                                                                                   
    Header unset ETag                                                                                                                                                                        
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"                                                                                                                
    Header set Pragma "no-cache"                                                                                                                                                             
    Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"                                                                                                                                       
  </ifModule>                                                                                                                                                                                
</Files>                                                                                                                                                                                     
Не посоветуете, как отключить кеширование?
Пока что временно в строку запроса добавляю рандомное число.
...
Рейтинг: 0 / 0
16.06.2014, 17:12
    #38670743
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.Пока что временно в строку запроса добавляю рандомное число.учитывая, что некоторые косячные прокси-серверы кэшируют запросы даже со всеми необходимыми заголовками - это самый надежный способ.
...
Рейтинг: 0 / 0
17.06.2014, 08:48
    #38671219
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.Не посоветуете, как отключить кеширование?
Вместо ГЕТ-запроса используй ПОСТ. Они не кешируются...
...
Рейтинг: 0 / 0
18.06.2014, 14:21
    #38672996
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Еще такой вопрос.
Нужно сделать автообновление данных на другой странице.
На странице используется много DIV, по сути при обновлении нужно будет получать с сервера процентов 90% от объема страницы.
Делать рефреш страницы не хочу, чтобы сохранить текущую позицию и открытые вкладки (вкладки это набор DIV, один из которых отображается, другие скрываются).
Если я буду запрашивать с сервера самого себя (свой URL), парсить ответ как XML и обновлять текущую страницу, могут быть какие-то неожиданности?
...
Рейтинг: 0 / 0
18.06.2014, 14:43
    #38673042
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.Еще такой вопрос.
Нужно сделать автообновление данных на другой странице.
На странице используется много DIV, по сути при обновлении нужно будет получать с сервера процентов 90% от объема страницы.
Делать рефреш страницы не хочу, чтобы сохранить текущую позицию и открытые вкладки (вкладки это набор DIV, один из которых отображается, другие скрываются).
Если я буду запрашивать с сервера самого себя (свой URL), парсить ответ как XML и обновлять текущую страницу, могут быть какие-то неожиданности?
Не знаю будут ли проблемы (скорее всего будут, так как парсинг - дело неблагодарное), но то что эта структура в корне неправильная - это точно.

Каждый запрос должен взять свою порцию данных (если это данные некого товара, то все данные товара... если это календарь праздников, то должен взять все данные за месяц/год и т.д.). Но неправильно брать излишние данные, а потом сложными манипуляциями выделять из них нужные.
...
Рейтинг: 0 / 0
18.06.2014, 15:12
    #38673086
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Страницу я формирую сам, она XHTML-валидная, поэтому проблем с парсингом я не ожидаю.
У меня нет какой-то небольшой порции данных, фактически мне нужно обновить все содержимое страницы, но сохранить при этом текущее состояние страницы (отображаемые DIV, позицию скроллбара и т.п.).
...
Рейтинг: 0 / 0
18.06.2014, 15:59
    #38673173
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.Страницу я формирую сам, она XHTML-валидная, поэтому проблем с парсингом я не ожидаю.
У меня нет какой-то небольшой порции данных, фактически мне нужно обновить все содержимое страницы, но сохранить при этом текущее состояние страницы (отображаемые DIV, позицию скроллбара и т.п.).

Как по мне - это лишняя нагрузка :) Но тебе виднее... Насчёт скролла - не уверен что он сохранит свою позицию при замене контента :) Это стоило бы проверить.
...
Рейтинг: 0 / 0
18.06.2014, 17:50
    #38673407
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Еще такой вопрос.
А можно ли из полученного ответа (содержимое страницы) малой кровью получить DOM?
Фактически мне нужно будет выполнить doc.getElementById('fld').innerHTML = data.getElementById('fld').innerHTML, где doc это текущий документ, а data — это загруженный документ.
Но в XML метода getElementById нет, а XPath-запросы мне применить не удалось.
...
Рейтинг: 0 / 0
18.06.2014, 18:31
    #38673488
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Нашел такой код на W3C:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if (window.DOMParser)
   {
   parser=new DOMParser();
   xmlDoc=parser.parseFromString(text,"text/xml");
   }
 else // code for IE
   {
   xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
   xmlDoc.async=false;
   xmlDoc.loadXML(text); 
   }  


Но он у меня почему-то выдает ошибку на parser.parseFromString.
...
Рейтинг: 0 / 0
18.06.2014, 18:38
    #38673495
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.Нашел такой код на W3C:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if (window.DOMParser)
   {
   parser=new DOMParser();
   xmlDoc=parser.parseFromString(text,"text/xml");
   }
 else // code for IE
   {
   xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
   xmlDoc.async=false;
   xmlDoc.loadXML(text); 
   }  


Но он у меня почему-то выдает ошибку на parser.parseFromString.

так может text/html надо, а не xml? :) А то ведь html отвечает не всем правилам xml. Он является модифицированным и менее требовательным.
...
Рейтинг: 0 / 0
18.06.2014, 18:46
    #38673505
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Вот рабочая версия:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function refreshPage()
{
	res = httpGet("status.php");
	if (res)
	{
		parser = new DOMParser();
		doc = parser.parseFromString(res, "text/html");
		if (doc)
		{
			ids = ["timestamp","station","ap"];
			while (id = ids.pop())
			{
				document.getElementById(id).innerHTML = doc.getElementById(id).innerHTML;
			}
		}
	}
	setTimeout(refreshPage,60000);
	return true;
...
Рейтинг: 0 / 0
19.06.2014, 07:36
    #38673778
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных на страницы без перезагрузки страницы
Alibek B.,

Не стоит засорять глобальную область видимости. Перед оглавлением переменных стоит писать var что бы сделать их локальными. Иначе потом возможны траблы.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Обновление данных на страницы без перезагрузки страницы / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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