Страница 1 из 2

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

Добавлено: 28 окт 2013, 23:36
viboxjuwin
Есть 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 секунд без видимой перезагрузки страницы.

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

Добавлено: 28 окт 2013, 23:53
Duncon
Таймер на странице и через AJAX вставка результата..

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

Добавлено: 29 окт 2013, 01:09
viboxjuwin
Пробовал вставить аяксом из стороннего файла. Не отображается содержимое.

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

Добавлено: 29 окт 2013, 03:22
viboxjuwin
Представил код в таком виде
<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. Обновление не происходит.

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

Добавлено: 29 окт 2013, 13:05
Duncon
js клиентский язык, т.е. выполняется только на пользователе. php серверный. Нужно обратиться к серверу, скрипт отдаст текст js вставит его в элемент. погуглите AJAX

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

Добавлено: 29 окт 2013, 13:08
viboxjuwin
Гуглил. Со вчерашнего дня до глубокой ночи! Перепробовал массу скриптов. Результат равен нулю!

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

Добавлено: 29 окт 2013, 13:29
Duncon
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);
}

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

Добавлено: 29 окт 2013, 13:31
Duncon
gid это сокращалка document.getElementById(

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

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

а этот кусок в блок, где картинку планирую выводить...
onload="setInterval('getinfo()',30000)"

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

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