Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / HTML, JavaScript, VBScript, CSS Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Приветствую!

Посоветуйте, пожалуйста, как лучше поступить. Есть страница, которая, в общем, вся формуруется сервером как строка. Т.е. добавить в нее, желательно в конец, что-то не проблема. На странице работает аснхронный таймер. Содержимое страницы, видимое в браузере, исправно обновляется без видимой перезагрузки.

Есть необходимость передать в браузер от сервера данные так, что бы потом можно было с ними работать в JavaScript. Первое, что пришло в голову, это передача данных через ячейку невидимой таблицы. И через document.querySelector проверять в ней данные. Это, конечно, работает но как-то уж очень криво в целом. Кроме того, это требует добавление в документ довольно сложной структуры.

Можно было бы добавить в конец документа описания, например переменных сразу на JS и обновлять их, но думаю, это не сработает без полной перезагрузки страницы. Может, есть вариант добавлять в конец какие-то динамически изменяемые данные в HTML, что бы потом иметь к ним доступ из JS ? Что-то типа <OBJECT> с парами параметр - значение?

Сообщение было отредактировано: 26 окт 21, 11:02
26 окт 21, 11:00    [22388215]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Хм. Кажется, сделал. Через атрибуты данных HTML5 и тот же document.querySelector. Сейчас еще проверю, но пока обновляется...

Сообщение было отредактировано: 26 окт 21, 11:27
26 окт 21, 11:27    [22388228]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
Есть страница, которая, в общем, вся формуруется сервером как строка.

Если ты каждый раз формируешь сервером страницу полностью - данные можно записать как часть скрипта JS
<script>
   let data = 'твои данные';
</script>

Но если потом страничка (не перегружаясь) получает новые данные - нужно будет менять и data...
26 окт 21, 11:51    [22388250]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Но если потом страничка (не перегружаясь) получает новые данные - нужно будет менять и data...

Данные, которые в data поменять-то можно. Но "подхватит" ли их интерпретатор JS при неполном обновлении страницы?
Что-то у меня пока не получилось ничего по этому пути. Кроме того, появилось подозрение, что даже если это и сработает, мы грубо нарушим оптимизации в вируальной машине при кажом обновлении?

Вот это
<div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div>
работает.

Может, есть еще методы?
26 окт 21, 12:05    [22388262]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
Хм. Кажется, сделал. Через атрибуты данных

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

Так можно поступать и с переменными на странице... ДОМ трогать не обязательно.
26 окт 21, 12:10    [22388265]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
Данные, которые в data поменять-то можно. Но "подхватит" ли их интерпретатор JS при неполном обновлении страницы?

Смотря что ты понимаешь под интерпретатор JS...

Andi_WEB
Вот это
<div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div> 

работает.

Проиллюстрирую...
<script>
   // Тут не видно
</script>
<div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div> 
<script>
   let data = 'наши данные'
</script>
<script>
   // Тут видно
</script>
26 окт 21, 12:16    [22388271]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Значит ты таки формируешь страницу полностью каждый раз...
Будете смеятся - но трудно сказать. Я WEB в общем не занимаюсь, в основном железками. У системы есть ядро, которое использует в т.ч. AJAX. На странице таймер и элемент TEXT, в который попадает весь код страницы на HTML. Работу этого сервера я себе представлял примерно так - таймер, используя механизм AJAX получает с сервера только "видимое" представление страницы, а JS часть загружается только при первом обращении к странице, и не интерпретируется заново при обновлениях.
26 окт 21, 12:18    [22388273]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
Может, есть еще методы?

JS может еще получить данные из УРЛа...
Но далее, если они обновляются без изменения УРЛ, нужно будет самостоятельно отслеживать их изменения.
26 окт 21, 12:18    [22388274]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
используя механизм AJAX получает с сервера ...

Это уже динамическое изменение...

При таком варианте - передать начальные данные можно и статикой. Не в атрибутах, прямо в скрипте.
Когда будешь получать данные подгрузкой (механизм AJAX) находи там нужное и меняй значение переменным (у меня это data).
26 окт 21, 12:21    [22388275]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
А если я просто в конец страницы добавляю по типу

<div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div>


с нужними данными, это грозит чем-то нехорошим, как думаете? Проверил, вот так:

const datareturn = document.querySelector('#tcp_cb'); alert(datareturn.dataset.columns);


все вроде извлекается и отображаются текущие данные. Т.е. отсюда я заключил, что можно дописать их обработку в скрипт и работать с ними. Правда, проверял-то я это пока в консоли.

Сообщение было отредактировано: 26 окт 21, 12:27
26 окт 21, 12:25    [22388280]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
А если я просто в конец страницы добавляю по типу

<div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div>

с нужними данными, это грозит чем-то нехорошим, как думаете? Проверил, вот так:
const datareturn = document.querySelector('#tcp_cb'); alert(datareturn.dataset.columns);


все вроде извлекается и отображаются текущие данные.

Нехорошего не будет точно.
Просто данные с сервера и не более того.

Главное чтобы они были видны в нужный тебе момент.
А далее остается только их модифицировать при получении свежей партии данных с сервера...
26 окт 21, 12:40    [22388287]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Да, прошу прощения, только сейчас понял, что сразу не совсем ясно задал вопрос. С самого начала речь шла об обновляемых данных, коннчно. Измеряемое значение. Сейчас попробую внедрить обработку в страницу, а не проверять с консоли. Интересно также, будет ли рботать, если при следующем обновлении страницы, скажем, станет не два элемента dataset ( columns и columns1 ), а появится еще columns2...
26 окт 21, 12:44    [22388290]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
Интересно также, будет ли рботать, если при следующем обновлении страницы, скажем, станет не два элемента dataset ( columns и columns1 ), а появится еще columns2...

Какие данные передашь - такие и получишь при "обработке".

А пробовал передавать денные именно в скрипте, в переменных JS?
Если это все нужно для скрипта, что будет "крутиться" на странице - не стоит так "далеко" прятать данные...
Вот некая иллюстрация...

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--
<script src="https://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
-->
<style>
</style>
<script>
document.addEventListener('DOMContentLoaded', () => {
	const datareturn = document.querySelector('#tcp_cb'); 
	alert('Данные из атрибута ' + datareturn.dataset.columns);
	alert('Но они и так видны ' + data.columns);
})
</script>
</head>
<body>
<div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div>
<script>
	let data = {
		columns: 0.455979254795238,
		columns1: "asd"
	}
</script>
</body>
</html>
26 окт 21, 12:58    [22388301]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> А пробовал передавать денные именно в скрипте, в переменных JS?
Пробовал первым делом, не заработало. Потому сделал сначала с таблицей.
Правда, это было вчера и очень поздно, вероятен мощный затуп :-)

Сегодня еще попробую несколько вариантов. Спасибо за советы.
26 окт 21, 13:04    [22388303]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1506
Andi_WEB
...

Есть необходимость передать в браузер от сервера данные так, что бы потом можно было с ними работать в JavaScript. Первое, что пришло в голову, это передача данных через ячейку невидимой таблицы. И через document.querySelector проверять в ней данные. Это, конечно, работает но как-то уж очень криво в целом. Кроме того, это требует добавление в документ довольно сложной структуры.

Можно было бы добавить в конец документа описания, например переменных сразу на JS и обновлять их, но думаю, это не сработает без полной перезагрузки страницы. Может, есть вариант добавлять в конец какие-то динамически изменяемые данные в HTML, что бы потом иметь к ним доступ из JS ? Что-то типа <OBJECT> с парами параметр - значение?

Объявляешь внутри тега script переменную в javascript (в своей странице) и ей можно присваивать значение и с ним потом работать.

Сообщение было отредактировано: 26 окт 21, 13:11
26 окт 21, 13:08    [22388306]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Объявляешь внутри тега script переменную в javascript (в своей странице) и ей можно присваивать значение и с ним потом работать.

Да, в случае статики это наверное было бы выходом. Но, во-первых, у меня это почему-то пока вообще не заработало. Переменная Undefined и все тут. А у меня ведь эта переменная (или переменные) будут обновлятся несколько раз в секунду. Не сойдет ли с ума интерпретатор JS в браузере?

Пока склоняюсь к мысли, что "корежить" понемногу DOM более безопасно, а через атрибуты данных HTML5 наверное так и вообще самое оно.
26 окт 21, 13:46    [22388334]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
А у меня ведь эта переменная (или переменные) будут обновлятся несколько раз в секунду. Не сойдет ли с ума интерпретатор JS в браузере?

Нет, не переживай за это...
26 окт 21, 13:58    [22388340]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1506
del

Сообщение было отредактировано: 26 окт 21, 14:24
26 окт 21, 14:17    [22388348]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Andi_WEB
Интересно также, будет ли работать, если при следующем обновлении страницы, скажем, станет не два элемента dataset ( columns и columns1 ), а появится еще и columns2...


Проверил - работает. Как на увеличение, так и в сторону уменьшения числа элементов datadset. Т.е. это довольно удобно в моем случае, можно динамически изменять не только сами переменные, но и их колличестсво. Не нужно в данном случае городить что-то вроде сериализации, JSON строки например, а можно работать с парами параметр - значение.
26 окт 21, 15:20    [22388380]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13769
Andi_WEB
Не нужно в данном случае городить что-то вроде сериализации, JSON строки например, а можно работать с парами параметр - значение.

Я выше показал тебе альтернативу с объектом JS... ;)
26 окт 21, 15:35    [22388393]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB
Не сойдет ли с ума интерпретатор JS в браузере?
ну в нынешни
Andi_WEB
Есть страница, которая, в общем, вся формуруется сервером как строка.
любая страница - это строка.
Andi_WEB
Первое, что пришло в голову, это передача данных через ячейку невидимой таблицы.
бредовя идея
Andi_WEB
Через атрибуты данных HTML5
тоже бред
Andi_WEB
при неполном обновлении страницы?
это что за бредятина?
Andi_WEB
Работу этого сервера я себе представлял примерно так - таймер, используя механизм AJAX получает с сервера только "видимое" представление страницы,
еще бред.
кто мешает загрузить страницу один раз, а далее загружать по ajax только данные в той или иной форме?
получили данные обработали, отобразили в нужном вид.
и не надо обновлять всю страницу. обновляется только сам объект отображения - таблица, график...для сервера меньше работы
как вариант - объект отображения - тоже строка - можно формировать на сервере, передавать в браузер в виде готовой html-строки и просто вставлять в dom.
26 окт 21, 18:26    [22388446]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Так... переменные передаются. Теперь настало время сделать что бы можно было отлавливать их изменение. Но не делать же это по таймеру! Погуглив, пришел к вот такой вот конструкции:

var timerId;
var Values_div = document.getElementById('tcp_cb');
var observer;

function Check_Values (mutations) {  
  var  Dataset_Values= mutations[0].target;
  alert(Dataset_Values.dataset.columns); // Выводим обновленное значение первой переменной
  alert(Dataset_Values.dataset.columns1); // Выводим обновленное значение второй переменной 
  Dataset_Values.dispatchEvent(event);
}

function Init_Observer() // Инициализация "наблюдателя" за изменениями
{
 Values_div = document.getElementById('tcp_cb');
 observer = new MutationObserver(Check_Values);
 observer.observe(Values_div, {attributes: true, attributeOldValue: true});   
}

function Create_Timer() 
{
 timerId=window.setInterval(Proxy_Function, 200); // Вызываем вспомогательную функцию
}

function Proxy_Function() 
{
 Init_Observer();
 window.clearInterval(timerId); // Останавливаем таймер
}

document.addEventListener("DOMContentLoaded", Create_Timer);


Но пришел не сразу, а постепенно. Все попытки запустить этот механизм без вспомогательный функций оканчивались ошибкой -
"Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'."
Как будто что-то не проинициализированно (несмотря ня запуск после DOMContentLoaded), но что? Изучать JS конечно надо, будем стараться. Но все же - как можно отрефакторить этот кусок кода? Думаю, тут дело не в положительном влиянии задержки, что-то неверно в общем.

И можно ли как-то автоматически отследить, какая именно переменная была изменена? Процедурно это конечно сделать несложно, но может есть более изящное решение? Вот оно, хранилище данных: <div id="tcp_cb" data-columns="127" data-columns1="128" data-columns2="129"> </div>

Сообщение было отредактировано: 26 окт 21, 22:07
26 окт 21, 22:07    [22388522]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Да, вот это конечно лишнее: Dataset_Values.dispatchEvent(event);
А var Dataset_Values лучше вынести из функции.
26 окт 21, 22:23    [22388526]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB,

у тебя данные приходят по ajax?
что значит переменные передаются?
откуда передаются? каким образом передаются?

зачем такие сложности?
27 окт 21, 06:46    [22388562]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB
Так... переменные передаются
а сам факт передачи - ни есть из изменение?
почему по факту передачи не запускать их обработку ?
27 окт 21, 06:49    [22388563]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
voraa
Member

Откуда:
Сообщений: 299
Да зачем весь этот бред. Почему не сделать, как это делается всегда и всюду?
Получил JSON от сервера, распарсил, получил объект и делай дальше, что хочешь.
Зачем сложности с дивами, обсерверами...?
27 окт 21, 10:03    [22388601]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Да зачем весь этот бред. Почему не сделать, как это делается всегда и всюду?

Экспериментирую пока. Сейчас посмотрю, можно ли что-то из AJAX вытянуть в этом случае. Читаю про CallBack в частности. Была бы поддержка WebSocket со стороны сервера, наверное, было бы проще и надежнее. Но чего нет, того нет.

Сообщение было отредактировано: 27 окт 21, 10:44
27 окт 21, 10:43    [22388626]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1506
вадя
Andi_WEB
Так... переменные передаются
а сам факт передачи - ни есть из изменение?
почему по факту передачи не запускать их обработку ?
Вот тоже не понял, почему не делать так, зачем отслеживать изменения, как будто они происходят чудесным неизвестным способом, а не свой же код меняет.
27 окт 21, 10:54    [22388633]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
s62
Вот тоже не понял, почему не делать так, зачем отслеживать изменения, как будто они происходят чудесным неизвестным способом, а не свой же код меняет.
ещё немного и предложу ws
27 окт 21, 11:08    [22388636]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Вот тоже не понял, почему не делать так, зачем отслеживать изменения, как будто они происходят чудесным неизвестным способом, а не свой же код меняет.

Виноват, недопонял. С одной стороны, оно, конечно так. А с другой - не совсем. Есть готовая подсистема WEB-сервера, которая почти черный ящик, заменить его невозможно. Логика его работы, равно как и существенное расширение его функциональных возможностей, мне принципиально недоступны для модификации. Эта програмная часть выдает готовую страницу, в которую мне хотелось бы добавить еще данных от других датчиков. Со стороны браузера никаких событий, нажатий не происходит. Известно только, что на странице, которую формуирует сервер, работает таймер, по которому и обновляется страница. Вот как-то так. Вот я и изучаю технологии, связанные с JS, смотрю вокруг так сказать. Кстати, с DIV дело похоже также попахивает фиаско. Похоже, что при работе таймера обновляется и JS на странице. Иначе говоря, с обновлением теряется предыдущее состояние подсистемы JS. Можно, конечно, посмотреть в сторону local storage браузера, подумаю. Во всяком случае, эта задача, по-моему, прекрасная зарядка для ума.

Сообщение было отредактировано: 27 окт 21, 12:22
27 окт 21, 12:19    [22388662]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB,

вся страница обновляется по таймеру?
это обозначает, что происходит перезагрузка всей страницы?

что происходит с данными? они обрабатываются для вывода на экран?
что за вывод на экран?
27 окт 21, 13:00    [22388713]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
>вся страница обновляется по таймеру?
>это обозначает, что происходит перезагрузка всей страницы?

Трудно сказать. Я не настолько пока силен в отладчике браузера, что бы полностью понять, где там что. Страница, генерируемая сервером, снабжена JS. Попадаются и фразы с AJAX.

>что происходит с данными? они обрабатываются для вывода на экран?
>что за вывод на экран?

Сейчас в браузере судя по всему ничего не обрабатывается, строго говоря. Отображается страница, сформированная сервером. Если на сервере ничего не происходит (состояние логических датчиков не изменяется), то в отладчике браузера скорость обмена примерно 1 Кб в секунду. Если что-то изменяется, объем передаваемых данных несколько увеличивается. Браузер потребляет 1-2% процессорного времени, в основном, до 1 процента. Визаульно в браузере URL конечно не меняется, и вообще нет с строке состояния никаких визуальных изменений. А данные тем не менее поступают от сервера. Это, насколько я понимаю, и есть частичное обновление страницы по таймеру и AJAX.
27 окт 21, 13:30    [22388742]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
voraa
Member

Откуда:
Сообщений: 299
Т.е. понимать это надо так.
1. Есть сервер, который при обращении, выдает готовую html страницу с данными. И заставить выдавать его что то другое, например JSON, нет никакой возможности.

2. Вы хотите сделать свою страницу, которая будет периодически обращаться к серверу, получать от него данные, но в виде текста html, извлекать из этого html данные и отображать их уже на своей странице.

Правильно я понял?

Если так, то не можете ли вы привести пример той страницы, которую генерит сервер? Если они не слишком большие.
27 окт 21, 13:48    [22388764]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
P.S. Но вообще часть страницы, так сказать верхняя, включая JS судя по всему, именно не обновляется, да. В отладчике Edge на вкладке "Элементы" при обновлении страницы (поступлении данных) красным выделяются только строки, которые содержат таблицы и процее. Шапка страницы остается неизменной. Интересно, какое событие за это отвечает.. это точно не document.addEventListener("DOMContentLoaded"...) и похоже не window.onload.
27 окт 21, 13:50    [22388767]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB,

надо выяснить точно данные на странице (без твоего внедрения) обновляются по ajax?
или ещё и происходит полное обновление ? по какому событию?

вообще не логично , что страница сама обновляется полностью.
27 окт 21, 14:23    [22388802]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
>1. Есть сервер, который при обращении, выдает готовую html страницу с данными. И заставить выдавать его что то другое, например JSON, нет никакой возможности.

>2. Вы хотите сделать свою страницу, которая будет периодически обращаться к серверу, получать от него данные, но в виде текста html, извлекать из этого html данные и отображать их уже на своей странице. Правильно я понял?

Да, спасибо, почти все так. Из готового сервера (в связке с железом) страница выходит в некотором виде. Но у этого сервера, скажем так, есть программный интерфейс, который позволяет только что-то добавить к странице и потом она уже уйдет к пользователю. Ну или ничего не добавлять, уйдет как есть.

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

Если предположить, что JS может быть в любом месте, я думал дописать в конце данные от другого устройства + обрабатывающий их JS (отображение я сделаю, это уже следующий этап). И уже результирующую страницу выдавать в браузер.

К сообщению приложен файл (111.zip - 22Kb) cкачать
27 окт 21, 14:37    [22388818]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB,

ты отвечать на поставленные вопросы будешь?
иначе трудно понять что у тебя там
27 окт 21, 14:42    [22388825]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
voraa
Member

Откуда:
Сообщений: 299
Там все очень непросто.
Как добавить что то на уже существующую страницу извне, не меняя текста самой страницы - вообще трудно сказать.
Но там, как можно понять, работа идет так -
Открывается страница, которая приходит с сервера. Сама она больше не перезагружается.
Но у нее есть iframe. Он не виден, т.к сдвинут в координаты (-10000, -10000).
Вот он толи перезагружается, толи выдает ajax запросы по таймеру.
Что он делает дальше - пока не понял. Возможно уже код из этого iframe меняет родительскую страницу. Но не перезагрузкой, а просто изменением DOM.

Код довольно старый, разбирать его тяжело. Написан во времена IE4 и NN6. (Еще до появления Firefox, не говоря уж о Хроме, если кто не помнит).
Тем более, там некоторые скрипты похожи просто на библиотеки, из которых значительная часть просто не используется.
Без отладчика трудно смотреть, что там творится на самом деле.
27 окт 21, 21:26    [22389120]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Спасибо за ответ.

А если все же попробовать вариант с добавление <div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div>
Это как пробная структура. Ее потом видно в отладчике, она доступна и для отслеживания измененний, если по document.addEventListener("DOMContentLoaded"...) приклеить к странице и запустить код, который я приводил ранее.

Но работает это не долго. Почему - пока не понимаю. Знаний предмета не хватает. Если я меняю что-то в отладчике, скажем в этом значении "0,455979254795238", то это, конечно, срабатывает. Но перестает работать после первого изменения содержимого страницы. Хотя в отладчике шапка страницы, содержащая JS-код визуально не менятся - отладчик при изменении содержимого подсвечиват красным только строки с таблицей например. Если код JS потом ввести в консоли, то опять работае до первого изменения страницы по таймеру. Точнее, таймер-то понятно щелкает всегда, но если состояние датчиков на сервере не изменилось, то ничего не обновляется.

Первый и самый главный этап - это внедрить дополнительные данные извне и получить возможность обрабатывать их на JS. С отображением проще - у сервера есть админка, где можно создать пустые таблицы, если ильно захотеть. Т.е. место для отображения будет...

Сообщение было отредактировано: 27 окт 21, 21:53
27 окт 21, 21:46    [22389126]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Но работает это не долго
Подозреваю, что не работает потому, что при обновлении страницы "<div id="tcp_cb" по факту уже не тот. Т.е у него уже нет обработчика, это другой экземпляр?
28 окт 21, 00:53    [22389175]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
voraa
Member

Откуда:
Сообщений: 299
Andi_WEB
> Но работает это не долго
Подозреваю, что не работает потому, что при обновлении страницы "<div id="tcp_cb" по факту уже не тот. Т.е у него уже нет обработчика, это другой экземпляр?

Да конечно, если создали новый див, то это ужу совсем другой, хоть и с таким же ид.

>А если все же попробовать вариант с добавление <div id="tcp_cb" data-columns="0,455979254795238" data-columns1="asd"> </div>
> если по document.addEventListener("DOMContentLoaded"...) приклеить к странице и запустить код, который я приводил ранее.

Вот этого всего не понимаю. Куда добавить? В какую страницу?
Что значит приклеить и запустить?
28 окт 21, 07:05    [22389186]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Добрый день!
> Вот этого всего не понимаю. Куда добавить? В какую страницу?

А. так это там совсем просто, сорри что не объснил толком.

У сервера есть несколько GET запросов, видимо, для расширения планировалось. Один из них - add_string с параметром. Если его выполнить с некой строкой, то она просто будет добавлятся в конец каждого ответа. Т.е. он запоминает ее внутри и приклеивает к ответу в браузер.

А для JS там есть встроенный редактор, он так и называется - Пользовательский JavaScript. По умолчанию там пусто. Я добавил туда код обсервера, а get-запросом послал вот это: <div id="tcp_cb" data-columns="0,45597925479523" data-columns1="asd"> </div>

Результирующая страница в архиве. Даже если ее открыть локально, и в отладчике менять что-то в 0,45597925479523, то видно, что скрипт работает. Но до лбновления страницы. В которой есть и скрипт, и DIV - но изменения не фиксируются. Пробовал не останавливать таймер, а периодически брать элемент и вешать обсервер, но тогда в отладчике изменение данных отлавливается, а при обновлении страницы с сервера - нет. Вот этого я вообще понять на могу. Вот что там вначале было в обсервере:

var timerId;
var Values_div = document.getElementById('tcp_cb');
var observer;
var  Dataset_Values;

function Check_Values (mutations) { 
  Dataset_Values= mutations[0].target; 
  alert(Dataset_Values.dataset.columns); // Выводим обновленное значение первой переменной
  alert(Dataset_Values.dataset.columns1); // Выводим обновленное значение второй переменной 
}


function Init_Observer() // Инициализация "наблюдателя" за изменениями
{
 Values_div = document.getElementById('tcp_cb');
 observer = new MutationObserver(Check_Values);
 observer.observe(Values_div, {attributes: true, attributeOldValue: true});   
}



function Create_Timer() 
{
 timerId=window.setInterval(Proxy_Function, 200); // Вызываем вспомогательную функцию
}


function Proxy_Function() 
{
 Init_Observer();
 window.clearInterval(timerId); // Останавливаем таймер
}


document.addEventListener("DOMContentLoaded", Create_Timer);


К сообщению приложен файл (2222.zip - 23Kb) cкачать

Сообщение было отредактировано: 28 окт 21, 12:59
28 окт 21, 12:51    [22389337]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB
У сервера есть несколько GET запросов, видимо, для расширения планировалось. Один из них - add_string с параметром. Если его выполнить с некой строкой, то она просто будет добавлятся в конец каждого ответа. Т.е. он запоминает ее внутри и приклеивает к ответу в браузер.
ни фига не понятно
28 окт 21, 14:38    [22389401]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
voraa
Member

Откуда:
Сообщений: 299
Andi_WEB,
Я все равно не понимаю

>У сервера есть несколько GET запросов, видимо, для расширения планировалось. Один из них - add_string с параметром. Если его выполнить с некой строкой, то она просто будет добавлятся в конец каждого ответа. Т.е. он запоминает ее внутри и приклеивает к ответу в браузер.
>а get-запросом послал вот это: <div id="tcp_cb" data-columns="0,45597925479523" data-columns1="asd"> </div>

Если просто добавить в конец ответа, то этот div добавится в конец - после закрывающего тега </html>

>А для JS там есть встроенный редактор, он так и называется - Пользовательский JavaScript. По умолчанию там пусто. Я добавил туда код обсервера,

Хотелось бы видеть, что в конце концов пришло в браузер.
В отладчике есть вкладка "Sources". Вот оттуда бы посмотреть, что пришло. И как скрипт туда добавился.
28 окт 21, 15:02    [22389413]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Хотелось бы видеть, что в конце концов пришло в браузер.
> В отладчике есть вкладка "Sources". Вот оттуда бы посмотреть, что пришло. И как скрипт туда добавился.

Добрый день. Вот так это выглядит. Вполне прилично вроде. Архив: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1339707&msg=22389337

К сообщению приложен файл. Размер - 49Kb


Сообщение было отредактировано: 28 окт 21, 15:20
28 окт 21, 15:19    [22389425]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
А это - JS:

К сообщению приложен файл. Размер - 122Kb
28 окт 21, 15:21    [22389427]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
voraa
Member

Откуда:
Сообщений: 299
Нашел что то в архиве.
Вы в отладчик то смотрите? Там же должны быть сообщения об ошибках.

Ваш код js добавляется в начало html файла между
<script>
и
</script>
ДО <body>
А что это значит? Это значит, что
var Values_div = document.getElementById('tcp_cb');
вернет null.
Т.к в момент выполнения скрипта никакого div с id=tcp_cb не существует.

Можно попробовать так
document.addEventListener("DOMContentLoaded", function () {
var timerId;
var Values_div = document.getElementById('tcp_cb');
var observer;
var  Dataset_Values;

function Check_Values (mutations) { 
  Dataset_Values= mutations[0].target; 
  alert(Dataset_Values.dataset.columns); // Выводим обновленное значение первой переменной
  alert(Dataset_Values.dataset.columns1); // Выводим обновленное значение второй переменной 
}


function Init_Observer() // Инициализация "наблюдателя" за изменениями
{
 Values_div = document.getElementById('tcp_cb');
 observer = new MutationObserver(Check_Values);
 observer.observe(Values_div, {attributes: true, attributeOldValue: true});   
}



function Create_Timer() 
{
 timerId=window.setInterval(Proxy_Function, 200); // Вызываем вспомогательную функцию
}


function Proxy_Function() 
{
 Init_Observer();
 window.clearInterval(timerId); // Останавливаем таймер
}

Create_Timer()
});


Но я не совсем уяснил, почему кто то должен менять параметры именно
data-columns="" data-columns1=""
и именно у div с id=tcp_cb ?
28 окт 21, 15:24    [22389431]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Извиняюсь, я немного поспешил и отправил не совсем ту страницу.
Обратите внимание, у меня есть описание var Values_div = document.getElementById('tcp_cb'); и она же получает значение в функции Init_Observer: Values_div = document.getElementById('tcp_cb');

Вариант, к корорым я экперементировал, имеет только var Values_div; Работает до первого изменения.

>Но я не совсем уяснил, почему кто то должен менять параметры именно
>data-columns="" data-columns1=""
>и именно у div с id=tcp_cb ?

Да это я послал серверу просто такую строку. Для теста. Вся строка "<div id="tcp_cb" data-columns="0,45597925479523" data-columns1="asd"> </div>" придумана мной и пока взята с потолка.

А так там будут нужные данные, до 2 Кб конечно примерно, но этого более чем достаточно. Несколько сотен байт.

В том то и дело, что в консоли никаких ошибок нет...

Сообщение было отредактировано: 28 окт 21, 15:50
28 окт 21, 15:47    [22389442]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB,

использовать span в качестве div - это нечто
и блок style где-то внутрях dom - ещё круче
28 окт 21, 15:51    [22389447]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB
Да это я послал серверу просто такую строку
откуда послал?
28 окт 21, 15:53    [22389451]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Можно попробовать так
Попробовал, работает один раз, если я прямо редактирую данные "0,45597925479523" в отладчике. До первого обновления данных с сервера.
28 окт 21, 15:57    [22389453]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> откуда послал?

Из простого TCP клиента как GET-запрос серверу. Ну API у него такой, что он запоминает эту строку, а потом может вставить в конец страницы.
28 окт 21, 15:59    [22389455]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Приветствую!
А есть какое-то логическое объяснение, почему этот код именно так работает и после многократных обновлений данных на по AJAX странице.

Но как работает - только если НАПРЯМУЮ редактировать в отладчике браузера на вкладки "Элементы" значения в элементе id='tcp_cb'.
Если данные приходят с сервера, то в отладчике я вижу, что ВИЗУАЛЬНО они меняются именно также, но событие не возникает. Однако, благодаря работающему таймеру, если опять менять значения в отладчике, то как бы все работает.

var timerId;
var Values_div;
var observer;
var Dataset_Values;
var Old_Values;

function Check_Values (mutations) { 
  Dataset_Values= mutations[0].target;
  if (Old_Values!=Dataset_Values.dataset.columns)
      { 
       Old_Values=Dataset_Values.dataset.columns;
       alert(Dataset_Values.dataset.columns); // Выводим обновленное значение первой переменной
      }
        }

function Init_Observer() // Инициализация "наблюдателя" за изменениями
{
 Values_div = document.getElementById('tcp_cb');
 observer = new MutationObserver(Check_Values);
 observer.observe(Values_div, {attributes: true});   
}



function Create_Timer() 
{
 timerId=window.setInterval(Proxy_Function, 500); // Вызываем вспомогательную функцию
}


function Proxy_Function() 
{
 Init_Observer();
}


document.addEventListener("DOMContentLoaded", Create_Timer);
29 окт 21, 16:45    [22390007]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19509
Andi_WEB
Если данные приходят с сервера,
что приходит с сервера?
29 окт 21, 17:48    [22390066]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Кажется начинает прояснятся. При ручном изменении в отладчике менятся 'attributes' и target - div tcp_cb.

А вот по приходу данных от сервера, которые на глаз в отладчике приводят к тем же рузультатам, меняется-то другое, а именно 'childList' ! Да еще и таргет другой. Ну будем думать дальше...
29 окт 21, 20:03    [22390148]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте как передать данные в обновляемую страницу HTML  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
В общем, все заработало. MutationObserver - сила!

И, кстати, работает и при такой концовке:

function Proxy_Function() 
{
 Init_Observer();
  window.clearInterval(timerId); // Останавливаем таймер
}


document.addEventListener("DOMContentLoaded", Create_Timer);


Теперь никакого периодического тайминга.

К сообщению приложен файл. Размер - 25Kb


Сообщение было отредактировано: 29 окт 21, 21:10
29 окт 21, 21:07    [22390165]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / HTML, JavaScript, VBScript, CSS Ответить