реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Частичное динамическое обновление веб-страницы
vovanxp
сообщение Jan 28 2015, 21:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-11
Пользователь №: 68 026



Помогите создать реализовать частичное динамическое обновление веб-страницы.

Проект на основе демки STM324xG_EVAL, LwIP_HTTP_Server_Raw, без FreeRTOS

Хочу сделать управление микроконтроллером через веб-страницу. Веб сервер работает,

Хочу сделать так чтоб на веб-страничке выводились информация так же как как выводится на ЛСД дисплей. Информация обновлялась динамически не перегружая страничку, под этим веб-дисплеем на веб-странице будут кнопки управления.

Знаю что нужно через javаscript, jQuery. Можно ли это реализовать без netconn и FreeRTOS и как реализовать.

Спасибо.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 28 2015, 22:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(vovanxp @ Jan 29 2015, 00:26) *
Знаю что нужно через javаscript, jQuery. Можно ли это реализовать без netconn и FreeRTOS и как реализовать.

Javascript - однозначно. jQuery - совсем-совсем не обязательно. Это называется AJAX, а если совсем точно, то XMLHttpRequest. Есть куча примеров. Никакой netconn и RTOS не нужен. Учите матчасть, она не очень большая.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 28 2015, 22:18
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Можно проще - разделить страницу на окна (FRAMES) в каждом окне которой будет свой интернет-контекст (<FRAME SRC=...>).
И во все контексты, которые требуют периодического обновления, поставить тег вроде этого:
<meta http-equiv="refresh" content="60">
который обновляется/перезагружается через каждый 60 сек.

Самая сложная здесь проблема - так поделить страницу на части, чтобы обновляемые числа оказались в отдельном окне(ах).
Но самая простая реализиция - двухфреймовая, где внешний вид табло и шапка заголовка (может быть не только вверху, но и слева) находится в одном фрейме и никогда не обновляется (мегатег refresh у нее отсутствует), а числа находятся в другом фрейме, который периодически обновляется.
Go to the top of the page
 
+Quote Post
x893
сообщение Jan 28 2015, 22:30
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



К ARM не имеет отношения. Смотрите на сайтах по веб дизайну - там этого тонны.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 28 2015, 22:34
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(x893 @ Jan 29 2015, 01:30) *
К ARM не имеет отношения.


А я-то думала, что HTML он и в Африке HTML. Не знала, что у ARM он какой-то особенный.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 29 2015, 02:24
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Дело не в арме, то, что человек хочет, сейчас называется angular js.
Погуглите. поддержку этого на микроконтролере развернуть возможно, но трудозатраты нереальны.
Обычно серверная часть берется уже готовая и делов не много.
Но в данном случае не тут то было.

Есть другие извращения, менее современные..


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 29 2015, 05:14
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Без jquery это делать не удобно.
XMLHttpRequest не во всех браузерах работает одинаково.
Я уже делал AJAX в связке с ucLinux на железке.
Сейчас работаю с проектом на FreeRTOS, надеюсь тоже использовать AJAX.
Через пару месяцев наверно доберусь до веб морды.
Про angular js не слыхал надо почитать.
Go to the top of the page
 
+Quote Post
vovanxp
сообщение Jan 29 2015, 08:41
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-11
Пользователь №: 68 026



Цитата(Xenia @ Jan 29 2015, 02:18) *
Можно проще - разделить страницу на окна (FRAMES) в каждом окне которой будет свой интернет-контекст (<FRAME SRC=...>).
И во все контексты, которые требуют периодического обновления, поставить тег вроде этого:
<meta http-equiv="refresh" content="60">
который обновляется/перезагружается через каждый 60 сек.

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


Я понимаю что это наглость, но не могли бы вы заготовку создать, для меня это все очень новое. Пока хочу сделать как можно проще, а потом буду скрипты докручивать. Я понимаю что HTML, JAVASCRIPT... не имеет прямое отношение к ARM, но как я понимаю веб- сервер на stm имеет ограничения, у меня веб-сервер без NETCONN и SOCKETS.







Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 29 2015, 09:11
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(vovanxp @ Jan 29 2015, 10:41) *
Я понимаю что это наглость, но не могли бы вы заготовку создать, для меня это все очень новое. Пока хочу сделать как можно проще, а потом буду скрипты докручивать. Я понимаю что HTML, JAVASCRIPT... не имеет прямое отношение к ARM, но как я понимаю веб- сервер на stm имеет ограничения, у меня веб-сервер без NETCONN и SOCKETS.


Вот пример страницы выводящей непрерывно график нагрузки за последнюю секунду микроконтроллера встроенного WEB сервера:
Код
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript" src="FLOT/excanvas.pack.js"></script>
<script language="javascript" type="text/javascript" src="FLOT/jquery.js"></script>
<script language="javascript" type="text/javascript" src="FLOT/jquery.flot.js"></script>
</head>
<body>

<div id="placeholder1" style="margin-left:20px;width:500px;height:150px"></div>

<script type="text/javascript">

var t;

var data_arr1 = [<!-#cpuuse_graph CPUUSE=last_sec>];

var options1 =
{
    legend: { show: false},
    lines: { show: true},
    colors: ["#000066"],
    grid: { color: "#990000"},
    points: { show: true},
    yaxis: { noTicks: 10},
    selection: { mode: "xy"}
};

function timedCount()
{
    t=setTimeout("timedCount()",1000);
    
    $.post('/cpuuse_graph',{CPUUSE:"last_sec"}, refresh_placeholder1);
}

function refresh_placeholder1(data)
{
    eval("data_arr1 = [" + data + "]");
    $.plot($("#placeholder1"), [ data_arr1] , options1);
}

$( timedCount());

</script>
</body>
</html>


Сделано с использованием библиотеки Google jquery
Каждую секунду вызывается функция timedCount которая посылает CGI запрос вида http://{имя вашего сервера}/cpuuse_graph?CPUUSE=last_sec
Сервер должен понимать такой запрос и высылать в ответ массив чисел через запятую.
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 29 2015, 09:21
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Использование Google jquery требует наличие интернета?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 29 2015, 09:22
Сообщение #11


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(vovanxp @ Jan 29 2015, 11:41) *
Я понимаю что это наглость, но не могли бы вы заготовку создать, для меня это все очень новое. Пока хочу сделать как можно проще, а потом буду скрипты докручивать. Я понимаю что HTML, JAVASCRIPT... не имеет прямое отношение к ARM, но как я понимаю веб- сервер на stm имеет ограничения, у меня веб-сервер без NETCONN и SOCKETS.


Таких примеров в интернете масса. Ищите на слово "Фреймы". Например, это:
https://htmlweb.ru/html/frame.php
Там и пример есть. Только заметьте, что в случае фреймовой организации каждое окно заполняется из кого-то адреса/линка.
Т.е. пример скрипта для двух окон может выглядеть так:
Код
<HTML>
<FRAMESET COLS="25٪,75٪" FRAMEBORDER="yes" BORDER="5" >
   <FRAME src="left.htm" NAME="toc_window">
   <FRAME src="right.htm" NAME="main_window">
</FRAMESET>
</HTML>

- Это ВСЁ! Ничего другого в этом html-скрипте нет и не должно быть! Хотя многооконная структура может быть богаче.
Однако во всех случаях сначала <FRAMESET> делит площадь вертикально (COLS) или горизонтально (ROWS), а затем тут же следуют в требуемом количестве <FRAME>, которые указывают адрес контеста, который в образовавшиеся окна загружать. Но можно в какие-то окна не загружать контест, а продолжать делить дальше, с помощью другого <FRAMESET>.

Вот вам наглядный пример (я его пришпилила к сообщению):
Код
<HTML>
<FRAMESET COLS="25٪,75٪" FRAMEBORDER="yes" BORDER="5" >
   <FRAME src="http://ru.thetimenow.com/clock/russia/moscow">
   <FRAME src="http://electronix.ru/forum/index.php?s=&showtopic=125728&view=findpost&p=1310551">
</FRAMESET>
</HTML>

Здесь я поделила страницу по вертикали на части 25% : 75%. В левую часть загрузила сайт http://ru.thetimenow.com/clock/russia/moscow, а в правую ваше сообщение с этого сайта.

В тех случаях, когда требуется периодическое обновление, то тег <meta> ставится не здесь, а в скрипте того контекста, который в данном окне вызывается.
Слева часы идут, только шрифт слишком крупый - ползунок влево надо смещать, чтобы секунды видно было. При этом текст обновляется только слева, а справа он неподвижен.
Прикрепленные файлы
Прикрепленный файл  test.html ( 249 байт ) Кол-во скачиваний: 30
 
Go to the top of the page
 
+Quote Post
Mahagam
сообщение Jan 29 2015, 09:52
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 2-07-04
Из: Minsk
Пользователь №: 240



Xenia, сегодня фреймы считаются дурным тоном, сродни использованию goto.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 29 2015, 09:56
Сообщение #13


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(uriy @ Jan 29 2015, 11:21) *
Использование Google jquery требует наличие интернета?


Скрипты могут лежать и на embedded WEB сервере.
Броузерами они кэшируются, так что грузиться будут один раз.

Цитата(Mahagam @ Jan 29 2015, 11:52) *
Xenia, сегодня фреймы считаются дурным тоном, сродни использованию goto.


Эт точно, гонять целиком WEB страницы, когда можно послать только данные и даже сжатые это немного кривовато.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 29 2015, 10:17
Сообщение #14


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(vovanxp @ Jan 29 2015, 11:41) *
Я понимаю что это наглость,...


это не наглость, это ваша лень...
поиск Вам в зубы. Вектора уже написали выше. Имхо "XMLHttpRequest" вектор правильный. Через него выйдете на готовый JScript-пример по асинхронному запросу к серваку пост либо гэт (там же найдёте универсальность к броузерам).
Далее вкурите язык, немного хэтэмээль и будет вам счастье.

Сообщение отредактировал kolobok0 - Jan 29 2015, 10:18
Go to the top of the page
 
+Quote Post
vovanxp
сообщение Jan 29 2015, 10:57
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-11
Пользователь №: 68 026



Всем большое спасибо, теперь знаю куда двигаться.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 07:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01489 секунд с 7
ELECTRONIX ©2004-2016