Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: обновление страницы через httprequest
 
 автор: spiner   (22.12.2005 в 01:44)   письмо автору
 
 

есть скрипт table.php, который выводит таблицу, в одном столбце которой чекбоксы.
есть файл table.html, в котором с помощью httprequest (ajax по-современному) результат table.php выводится в определенный <div> и обновляется каждую минуту:

  <html>
    <script>
      var xmlDoc = null ;
      function load() {
        if (typeof window.ActiveXObject != 'undefined' ) {
          xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
          xmlDoc.onreadystatechange = process ;
        }
        else {
          xmlDoc = new XMLHttpRequest();
          xmlDoc.onload = process ;
        }
        xmlDoc.open( "get", "table.php", true );
        xmlDoc.send( null );
      }
        function process() {
        if ( xmlDoc.readyState != 4 ) return ;
        document.getElementById("asd").innerHTML = xmlDoc.responseText ;
      }
      function update(){
      load();
      clearInterval(timerID);
      //timerID=setInterval('update', 1000)
      }
      
    </script>
      <body onload="load(); javascript: timer = setInterval('load()', 60000)"">
    <div id="asd"></div>
    </body>
  </html>


Когда выбираешь в table.html несколько чекбоксов, и попадаешь на время обновления, то после обновления чекбоксы пропадают. Вопрос: как сделать так, чтобы они не пропадали? Может функцию setinterval включить не в <body>? Есть идеи?
P.S.Т.е. например в gmail, когда работаешь над списком писем, и он в это время лезет на сервер за проверкой новых, то что ты наработал на пропадает..

   
 
 автор: 12345   (22.12.2005 в 02:16)   письмо автору
 
   для: spiner   (22.12.2005 в 01:44)
 

  <html>
    <script>
      var xmlDoc = null ; flipF=0;
      function load() {
        if (typeof window.ActiveXObject != 'undefined' ) {
          xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
          xmlDoc.onreadystatechange = process ;
        }
        else {
          xmlDoc = new XMLHttpRequest();
          xmlDoc.onload = process ;
        }
        xmlDoc.open( "get", "table.php", true );
        xmlDoc.send( null );
      }
        function process() { if ( xmlDoc.readyState != 4 ) return ;
        document.getElementById("asd"+flipF).style.display='none';
        flipF=1-flipF;
        (asdF=document.getElementById("asd"+flipF)).innerHTML = xmlDoc.responseText;
        asdF.style.display='block';
        //Ещё менять name у тех checkbox, которые дублируются в дивах
      }
    </script>
      <body onload="load();timer = setInterval(load, 60000)">
    <div id="asd0"></div>
    <div id="asd1" style=display:none></div>
    </body>
  </html>

   
 
 автор: spiner   (23.12.2005 в 00:02)   письмо автору
 
   для: 12345   (22.12.2005 в 02:16)
 

Что-то я не понял.. Можешь пояснить код?
не работает все равно

   
 
 автор: 12345   (23.12.2005 в 01:09)   письмо автору
 
   для: spiner   (23.12.2005 в 00:02)
 

Конечно, надо дописать и приспособить. А не работает подгрузка? А то в плане её я ничего не менял, только setInterval(load, 60000)"> .
Принцип такой, что создаёшь 2 слоя, один рабочий, в другой подгружается. Как только подгрузилось (function update() ), скрываешь рабочий слой, переименовываешь имена полей формы, чтобы не мешали, ставишь правильные имена в подгруженном (или грузишь сразу с правильными именами).

   
 
 автор: spiner   (23.12.2005 в 02:22)   письмо автору
 
   для: 12345   (23.12.2005 в 01:09)
 

не подгузка-то работала и работает.. флаги при перезагрузки спадают. можешь привести пример на примере таблицеы: table.php

<table border="1">
<tr><td>Привет</td><td><input type="checkbox" name="q1"></td></tr>
<tr><td>Здорово</td><td><input type="checkbox" name="q2"></td></tr>
</table>


Спасибо.

   
 
 автор: 12345   (23.12.2005 в 13:03)   письмо автору
 
   для: spiner   (23.12.2005 в 02:22)
 

Я этим не занимался (передачей кода поXMLHttpRequest), поэтому могу только предложить варианты. Получается, что если поставить на сервере <tr><td>Привет</td><td><input type="checkbox" name="q1" checked></td></tr>, то при приёме этот флаг спадает? А в параллельном диве флаги, установленные до приёма, остаются?

Если спадает, то особо удивительного здесь нет, при манипуляциях с DOM часто пишут, что value теряется, выделение option и подобное. Надо использовать другой способ передачи параметра, чтобы прочитать, например, скрытый div, принятый вместо table, взять из него textNode и обновить чекбоксы в таблице, которая не будет затрагиваться подгрузкой.

Вообще, ведь этот механизм предназначен для XML, которые там нормально передаются. К примеру, можешь принять не скрытый div, а xml-файл и прочитать его содержимое через DOM - самый естественный способ. На примере у меня работало.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования