обновление функции или блока php

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

viboxjuwin
Сообщения: 34
Зарегистрирован: 29 сен 2013, 22:18

28 окт 2013, 23:36

Есть php встроенный в код страницы
<div id='right'>
<?php
if ((date("H") == '18')&&(date("i") == '45')) {
echo '<img src="/images/b5.gif">';
} else {
echo '<img src="/images/b0.gif">';
}
?>

</div>
необходимо, чтобы данный код обновлялся каждые 5 секунд без видимой перезагрузки страницы.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

28 окт 2013, 23:53

Таймер на странице и через AJAX вставка результата..
[syntax=Delphi] [/syntax]
viboxjuwin
Сообщения: 34
Зарегистрирован: 29 сен 2013, 22:18

29 окт 2013, 01:09

Пробовал вставить аяксом из стороннего файла. Не отображается содержимое.
viboxjuwin
Сообщения: 34
Зарегистрирован: 29 сен 2013, 22:18

29 окт 2013, 03:22

Представил код в таком виде
<script>
function show()
{
now=new Date();
day=now.getDay();
if ((day==2)) document.getElementById('timess_div').innerHTML='<div><?php
if ((date("H") == '3')&&(date("i") == '17')) {
echo '<img src="/images/b5.gif">';
} else {
echo '<img src="/images/b0.gif">';
}
?></div>';
else document.getElementById('timess_div').innerHTML="<img src=../images/b0.gif>";}
</script>

<div id="name">
<div id='box'>
<div id="timess_div"></div><script type="text/javascript">setInterval(show, 1000);</script></div>
</div>

Думал, будет обновляться функция, вместе с ней обновится и php. Обновление не происходит.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

29 окт 2013, 13:05

js клиентский язык, т.е. выполняется только на пользователе. php серверный. Нужно обратиться к серверу, скрипт отдаст текст js вставит его в элемент. погуглите AJAX
[syntax=Delphi] [/syntax]
viboxjuwin
Сообщения: 34
Зарегистрирован: 29 сен 2013, 22:18

29 окт 2013, 13:08

Гуглил. Со вчерашнего дня до глубокой ночи! Перепробовал массу скриптов. Результат равен нулю!
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

29 окт 2013, 13:29

1 делается скорипт ajax.php

Код: Выделить всё

<?php
if ((date("H") == '3')&&(date("i") == '17')) {
echo '<img src="/images/b5.gif">';
} else {
echo '<img src="/images/b0.gif">';
}
?>
2 на странице запускаем интервал setInterval(makeRequest('path/to/ajax.php', '', 'timess_div'), 1000);
Ниже самая простая реализация ajax которую я успешно использую много лет. функция e - это то что экранировать нужно при передаче иначе будут проблемы: плюсы сожрёт, амперсанды являются частью составления запроса - это при передаче текста нужно.. Отэкранить в обратную на стороне сервера думаю не проблема.. (если нужно передать данные в скрипт - второе значение прмерно так выглядит 'name=f&text=' + e('mytext+text') ловим $_POST['name'] итд)

Код: Выделить всё

function e(s) {
  s = s.toString();
  s = s.replace(/\+/gm, '`p');
  return s.replace(/&/gm, '`7');
}
var http_request = false,
out = '';
function innerResult() {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) gid(out).innerHTML = http_request.responseText;
    else alert('There was a problem with the request.');
  }
}
function makeRequest(url, parameters, tout) {
  out = tout;
  http_request = false;
  if (window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) http_request.overrideMimeType('text/html');
  } else if (window.ActiveXObject) {
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {}
    }
  }
  if (!http_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }
  http_request.onreadystatechange = innerResult;
  http_request.open('POST', url, true);
  http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http_request.setRequestHeader("Content-length", parameters.length);
  http_request.setRequestHeader("Connection", "close");
  http_request.send(parameters);
}
[syntax=Delphi] [/syntax]
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

29 окт 2013, 13:31

gid это сокращалка document.getElementById(
[syntax=Delphi] [/syntax]
viboxjuwin
Сообщения: 34
Зарегистрирован: 29 сен 2013, 22:18

29 окт 2013, 13:34

Спасибо, буду разбираться)) Сейчас мысль в голову пришла, опробую сперва ее.
функцию задам
function getinfo(){
$.ajax({type:"POST", url:"info.php", dataType:"json", success:function(data){}});
}
только нужно, чтобы она элемент в нужном месте вставляла...

а этот кусок в блок, где картинку планирую выводить...
onload="setInterval('getinfo()',30000)"
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

29 окт 2013, 14:04

А зачем кажые 5 секунд дергать сервер, если часы и минуты можно получить в самом яваскрипте?
Если сайт не предполагает, что за ним будут наблюдать круглосуточно и без перерыва, можно сделать так: найти время, оставшееся до 18.45, и на этот интервал поставить setTimeout, который поменяет src картинки, а второй setTimeout на +1 минуту - который поменяет src обратно.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить