Hi, All!
Я тут спрашивал недавно, пару советов мне дали, но не совсем то, что хочется.
Указываю в заголовке HTML <meta http-equiv="Refresh" content="1">, каждую секунду страница начинает перерисовывать, очень хорошо. Теперь делаю, чтобы сервер когда не надо перерисовывать возвращал "HTTP/1.1 304 Not Modified" — все равно перерисовывает, зараза! Причем смотрю
снифером — данных мой сервер не отдает, только указанный заголовок, а браузер все равно картинку обновляет! (и при этом противно мигает). Пишут, что браузер должен запрос HEAD давать, но он его не дает — только GET. Что я делаю не так?
Пробовал с <iframe>, тоже кривовато получается — перерисовывается <iframe>, он маленький, конечно, и сам по себе не так мерцает, но строка статуса в IE все равно раз в секунду дергается, что выглядит раздражающе.
Можно было бы из JavaScript reload() вызвать, но я не понимаю, как из скрипта узнать у сервера, следует обновлять страницу или нет? Можно ли, например, периодически загружать значение какой-либо переменной с сервера (это было бы самое простое)? Но у меня это только с картинкой получется, а ее непонятно как if'у скормить...
Поэтому вопрос остается — как со стороны HTTP сервера управлять перерисовкой окна браузера (перерисовать, если в этом есть необходимость)?
Здравствуйте, VictorT, Вы писали:
VT>может, просто убрать <meta http-equiv="Refresh" content="1">, когда больше ненадо перегружать?
А как тогда заставить браузер обновиться, когда это будет нужно? HTTP-сервер, о котором идет речь — это некое устройство, которое я ваяю, и состояние которого отображается веб-страницей. Состояние иногда меняется, и хотелось бы, чтобы эти изменения браузер показывал без дополнительных телодвижений (типа нажатия кнопки "Обновить")
Здравствуйте, Сергей, Вы писали:
С> Указываю в заголовке HTML <meta http-equiv="Refresh" content="1">, каждую секунду страница начинает перерисовывать, очень хорошо. Теперь делаю, чтобы сервер когда не надо перерисовывать возвращал "HTTP/1.1 304 Not Modified" — все равно перерисовывает, зараза!
… С> Поэтому вопрос остается — как со стороны HTTP сервера управлять перерисовкой окна браузера (перерисовать, если в этом есть необходимость)?
А попробуй использовать push-технологию — выталкивание страниц сервером. Это аналог refresh, но только не на стороне клиента, а на стороне сервера.
С> Можно было бы из JavaScript reload() вызвать, но я не понимаю, как из скрипта узнать у сервера, следует обновлять страницу или нет?
Server (http device) can send something like <html><script>window.reload()<script></html> so you will get what you want (if i got issue correctly).
1) hidden fraim (0%, or something), Javascript request (based on JS time functions) to server to check flag, flag coming back at hidden fraim, flag validation and window.reload() if you need.
2) Remote scripting technology (let you get data from server without reloading).
Решил я проблему. Через XMLHttpRequest (после долгих поисков наткнулся в какой-то статье на эту технологию). Скрипт на странице раз в полсекунды отправляет серверу запрос, тот отвечает либо NotModified, либо OK, в последнем случае скрипт страницу перегружает. При обновлении страница все равно вздрагивает, конечно, но это я уже капризничаю. Тем более. что я уже понимаю как это решается — не релоадить страницу, а с помощью таких же XMLHttpRequest запросов обновлять только данные. Но это пока лень делать.