На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Автоматическая смена страниц , php+javascript
    Привет всем. Вот какая есть проблемка.
    Есть фреймовая страница. В ней содержится 2 фрейма. 2-ой (нижний) фрейм является управляющим для 1-ого фрейма. Во втором находится список страниц для отображения, а так же прописан javascript код, который проверяет, загрузилась ли до конца страница, находящаяся в 1-ом фрейме. Если она загрузилась, то 1-ый фрейм загружает следующую страницу списка, а 2-ой фрейм перегружает сам себя. Если страница в 1-ом фрейме не загрузилась до конца, то функция проверки загрузки страницы перегружается и делает проверку снова.
    Вроде бы всё понятно и кажется чего тут делать. Однако после загрузки 2-ой страницы, появляется глюк, что страницы зацикливаются...
    Прилагаю "сырцы" ;)
    Кто знает в чём глюк, ткните мне пальцем, уже третьи сутки над этой проблемой колбашусь, никак не могу решить. :wall:
    Фреймовая главная страница index.php:
    ExpandedWrap disabled
      <html>
      <head>
         <title>Title</title>
      </head>
      <frameset rows="*,30"  framespacing=0 border=0 frameborder=0>
          <frame name='fr_up' src='http://www.anysite.com/1.php' marginwidth=0 marginheight=0 scrolling=auto frameborder=0 noresize>
          <frame name='fr_down' src='http://www.anysite.com/down.php' marginwidth=0 marginheight=0 scrolling=no frameborder=0 noresize>
      </frameset>
      <body>
      </body>
      </html>
    2-ая (нижняя) страница down.php:
    ExpandedWrap disabled
      <?php
         $list_pages[]="'http://www.anysite.com/1.php'";
         $list_pages[]="'http://www.anysite.com/2.php'";
         $list_pages[]="'http://www.anysite.com/3.php'";
         $list_pages[]="'http://www.anysite.com/4.php'";
         $list_pages[]="'http://www.anysite.com/5.php'";
         $list_pages[]="'http://www.anysite.com/6.php'";
         $all++;
         if ($all>5) { $all=0; }
         $url=$list_pages[$all];
      ?>
      <html>
      <head>
         <title>Down</title>
         <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
         <script language="javascript">
         var start;
         var end;
         var cd_;
         var any_url_;
       
         function CountDown(any_url_) {
            start=-1;
            end=30;
            UpRepeat(any_url_);
         }
          
         function UpRepeat(any_url_){
            start++;
            if(start>end){
               start=-1;
            }      
            if (top.frames['fr_up'].document.readyState=="complete"){
               window.parent.frames['fr_up'].document.location.href=any_url_;
               document.location.reload();
            } else {
               cd_=setTimeout("UpRepeat(any_url_)",1000);
            }
         }
         </script>
      </head>
       
      <body onLoad=UpRepeat(<?=$url?>)>
      <table width='100%' height=30  border=0 cellpadding=0 cellspacing=0>
      <form name=form method=post action='down.php'>
      <tr>
         <td><input type=submit name=submit value='Следующая'></td>
         <td>Показано страниц <input type=text name=all value=<?=$all?> class=read_text readonly></td>
      </tr>
      </form>
      </table>
      </body>
      </html>
    Спасибо всем отозвавшимся!
      ExpandedWrap disabled
        document.location.reload();

      Не совсем понятно, зачем нужна данная строчка?

      А не лучше ли будет постить форму? В данном случае в начале скрипта необходимо получать $all:
      ExpandedWrap disabled
         
        $all=$_POST["all"];


      И еще. Для чего нужна следующая функция?
      ExpandedWrap disabled
         
        function CountDown(any_url_) {
         start=-1;
         end=30;
         UpRepeat(any_url_);
        }
        Да всё правильно было сделано, да не до делано :) Я уже разобрался в чём дело. Нужно слегка модифицировать функции в странице down.php:
        ExpandedWrap disabled
          <?php
          ...
              $a_++;
              $all_++;
              if ($a_>14) { $a_=0; }
              $url=$list_pages[$a_].",".$a_.",".$all_;
          ?>
          ...
          var page_num_;
          var page_all_;
          var url_next_; //Вместо any_url
           
          function CountDown(url_next_,page_num_,page_all_) {
              start=-1;
              end=30;
              if(UpRepeat()){
                  window.parent.frames['fr_up'].document.location.href=url_next_;
                  document.location.href='http://www.anysite.com/fr_down.php?a_='+page_num_+'&all_='+page_all_;
              }
          }
        И в функции UpRepeat()
        ExpandedWrap disabled
          ...
              if(start>end){
                  return false;
              }
              if (top.frames['fr_up'].document.readyState=="complete"){
                  return true;
              } else {
                  ur_=setTimeout("UpRepeat()",1000);
              }
          ...
        Теперь получается, что если нажать на кнопку в down.php, следующая страница загрузится в 1-ом фрейме как полагается, если ещё не загрузилась текущая. А функцию CountDown() я создал в самом начале, потому что предвидел, что она просто напросто понадобится... Но до конца ещё не сформировалось то, для чего она понадобится. :rolleyes: Теперь получается, что CountDown вызывает UpRepeat(), которая будет выполняться, пока либо не загрузится страница, либо пока не превысится время выполнения, т.е. end=30 (секунд). Правда по окончании времени больше ничего не будет происходить, но это уже совсем другой вопрос. :tong:
          Вопрос не по теме:
          Pattern®, ты из Магадана что ли?
            _XAV,
            Приватом сложно спровить было ?
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0271 ]   [ 15 queries used ]   [ Generated: 28.04.24, 13:37 GMT ]