Имя: Пароль:
IT
 
Как сделать автообновление странички на php?
0 php
 
03.11.05
20:11
Вопрос как сделать автообнообновление странчки? Ну не хватает
интелекта. Или где почитать.
1 goodfella
 
03.11.05
20:15
2 Волшебник
 
модератор
03.11.05
20:21
3 php
 
03.11.05
20:23
спасибо
4 Волшебник
 
модератор
03.11.05
20:25
А вот конкретные фрагменты программ:

Клиентский кусок:


var last_n = 0;

 function ShowNewMessages() {

  var topic_id    = '' + document.getElementById('topic_id').value;
  var table_messages    = document.getElementById('table_messages');
   var req = new Subsys_JsHttpRequest_Js();

   // Код, АВТОМАТИЧЕСКИ вызываемый при окончании загрузки.
   req.onreadystatechange = function() {

     if (req.readyState == 4) {
       if (req.responseJS)
      {
        if (req.responseJS.client_action==1) //show_new_messages
        {
           for(message in req.responseJS.messages_array)
           {
              tr = table_messages.insertRow(-1);
              td_user = tr.insertCell(0);
              td_user.width=165;

              td_user.innerHTML = req.responseJS.messages_array[message]['td_user_html'];

              td_message = tr.insertCell(1);
              td_message.align="left";


              td_message.innerHTML = req.responseJS.messages_array[message]['td_message_html'];

              last_n = req.responseJS.last_n;
           }
        }
       }
     }
   }


   req.caching = false; // Запрещаем кэширование
   req.open('POST', 'ajax_getnewmessages.php', true);

   // Посылаем данные запроса (задаются в виде хэша).
   req.send({    last_n: last_n, topic_id: topic_id });

 }


серверный кусок:


<?php

// Стартуем сессию.

if (isset($_REQUEST[session_name()])) session_start();


// Подключаем библиотеку поддержки.

require_once "Subsys_JsHttpRequest.php";


// Создаем главный объект библиотеки.

// Указываем кодировку страницы (обязательно!).

$JsHttpRequest =& new Subsys_JsHttpRequest_Php("windows-1251");


$topic_id = $_POST['topic_id'];

$from_n = (int)$_POST['last_n'] + 1;


include("selectmessages");


include("showmessages");


   // Формируем результат прямо в виде PHP-массива!

   $_RESULT = array(

     'client_action' => 1,

     'last_n' => $n,

     'messages_array' => $messages_array

   );

?>
5 sanitarro
 
04.11.05
11:43
Хм... мне всегда казалось что для этих целей предназначен один из заголовков html...

И что соответственно достаточно одной строчки кода в выводе страницы.
6 sanitarro
 
04.11.05
11:46
А если хочется ПРИНУЖДАТЬ клиента к выполнению запроса на сервер со 100% гарантией --
в клиент-серверном протоколе это гхм... немножко дурно пахнет имхо...
на то он и клиент, чтобы сам решать, когда и куда обращаться.


В таком случае обычно стоит задуматься не над "костылями", а над грамотным переосмыслением конечной задачи.
7 php
 
04.11.05
19:56
А как грамотно обновить игровое поле, когда играют 2 противника на севере? Надо всеже принудительно.... Или не прав?
8 sanitarro
 
05.11.05
01:27
(7) я ХЗ... если средняя длина промежутков между вызовами варьируется, промежуток заранее неизвестен, возможно стоит использовать не http, а более другой протокол? двусторонний?

Как конечная задача звучит-то?
9 php
 
05.11.05
12:24
Да для себя пишу сервер игры в реверси на php. Просто потренироваться в этом языкке. Игрок может играть как против компьюютера, так и против другого игрока. Вот когда играет после другого игрока надо поле обновлять. А как? Заставлять жать на refresh не хорошо по отношению к игроку.
10 Волшебник
 
модератор
05.11.05
12:45
(9) Если ход другого игрока, то каждые 15 секунд делать запрос к серверу, сделан ли ход?
11 php
 
05.11.05
13:12
это локальная сеть. И мой противник не думает по 15 секунд. Это скорее блиц. В общем решил обновлять только 2 div'a тот что поле и тот который показывает ход и состояние (количество фишек)
Закон Брукера: Даже маленькая практика стоит большой теории.