2017-02-04 4 views
0

私はソーシャルネットワークサイトを構築しようとしています。ポストの更新を継続するために、インターバル時間を20秒に設定してページとショーを更新します新しいコメントや投稿があります。ページセットを遅らせる方法ユーザーがまだテキストを入力している場合の間隔

私の問題は、ユーザーが自分のフォームにコメントを入力しようとしているときに、そのページがそのインターバルを実行していて、ヒットした20秒後にページがリフレッシュされ、

インターバル機能を設定して、誰もページ内のどこにでも約10秒間何も入力しなかった場合にカウントを開始するようにしたいとします。

コメントの投稿は投稿にバインドされており、参照用の静的IDがないため、入力IDを入力できません。

私が今説明したことを行う方法はありますか?私は一時的に間隔を停止したいページのコードです

<?php 
session_start(); 
if(!isset($_SESSION['login_user'])){ // check whether a session is set or not 
header('Location: registrationPage.php'); // Redirecting To Registration Page 
} 
include 'connectDB.php'; 

$FN = $_SESSION['login_user']; 
$result = mysqli_query($conn, "SELECT concat(U.firstName,' ',U.lastname) as fullName FROM tblUser U where U.userName='$FN'"); 
while($row = mysqli_fetch_array($result)){ 
    $UN = $row['fullName']; 
    } 



    ?> 

    <!DOCTYPE html> 


    <html> 
     <head> 
     <meta charset="utf-8"> 
     <meta name="description" content="Main page"> 
     <meta name="author" content="Sorokina E. and Menaker T."> 
     <title>Main page</title> 
     <script type="text/javascript" src="../js/jquery.min.js"></script> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
     <href='https://fonts.googleapis.com/css?family=Tangerine' rel='stylesheet' type='text/css'> 
     <!-- jQuery library --> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
     <!-- Latest compiled JavaScript --> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
     <script src="../files/connection.json" type="text/jason"></script> 
     <script src="../files/positions.json" type="text/jason"></script> 
     <script src="../files/messages.json" type="text/jason"></script> 
     <link rel="stylesheet" type="text/css" href="../css/mystyle.css"> 
     <script src="../js/typeahead.min.js"></script> 
     </head> 
     <body> 



      <div class="row alignT bg_color7"> 
        <div class="col-sm-1"> 
        <a href="mainPage.php"><img class="img-responsive" src="../images/logo.gif" alt=""></a> 
        </div> 

        <div class="col-sm-1"> 
        <?php 
        if(isset($_SESSION['login_user'])){ 
           echo '<span >Welcome ' . $UN. '! </span>'; 
          } 
        ?> 
        </div> 

        <div class="col-sm-1"> 
         <a href="mainPage.php" data-toggle="tooltip" title="Home"><span class="glyphicon glyphicon-home"></span></a> 
        </div> 

        <div class="col-sm-1"> 
        <a href="profilePage.php" data-toggle="tooltip" title="My profile"><span class="glyphicon glyphicon-user"></span></a> 
        </div> 

        <div class="col-sm-1 " data-toggle="tooltip" title="My connections" > 
        <button id="NL" class="Tbutton " type="button"> 
         <span class="glyphicon glyphicon-globe " style="vertical-align:middle; " ></span> 
        </button> 
        <div id="NC" class="notificationContainer"> 
        <div id="NT" class="notificationTitle">My friends:</div> 
         <div id="NB" class="notificationsBody forConnection"> 
          <?php include ('selectAllFriends.php');?></div> 
          <div id="NF" class="notificationFooter"><a href="#">See All</a></div> 

        </div> 
        </div> 

        <div class="col-sm-2 "> 
        <span > <input id="search" name="typehead" class="typeahead" data-provide="typeahead" placeholder="Search people" ></input></span> 
        </div> 

        <div class="col-sm-1 mm"> 
        <span><input type="button" onclick="location.href = 'allUsersPage.php';" class="btn btn-info" value="All people" ></span> 
        </div> 
        <div class="col-sm-1 " data-toggle="tooltip" title="My messages" > 
        <button id="NL1" class="Tbutton " type="button"> 
         <span class="glyphicon glyphicon-envelope" style="vertical-align:middle; " ></span> 
        </button> 
        <div id="NC1" class="notificationContainer"> 
        <div id="NT1" class="notificationTitle">My Messages:</div> 
         <div id="NB1" class="notificationsBody forMessages"> 
          <?php include ('selectAllMessages.php');?></div> 
          <div id="NF1" class="notificationFooter"><a href="#">See All</a></div> 


        </div> 
       </div> 


        <div class="col-sm-2 " data-toggle="tooltip" title="My notifications" > 
        <button id="NL2" class="Tbutton " type="button"> 
         <span class="glyphicon glyphicon-flag" style="vertical-align:middle; " ></span> 
        </button> 
        <div id="NC2" class="notificationContainer"> 
         <div id="NT2" class="notificationTitle">My Notifications:</div> 
         <div id="NB2" class="notificationsBody forNotifications"></div> 
          <div id="NF2" class="notificationFooter"><a href="#">See All</a></div> 
        </div> 
        </div> 


        <div class="col-sm-1"> 
        <a href="logout.php" data-toggle="tooltip" title="Log Out"> <span class="glyphicon glyphicon-log-out"></span></a> 
        </div> 
      </div> 



      <div class="row"> 
       <p class="alignW"><input class=" col-sm-5" type="text" name="mind" id="textField9" placeholder="Share your mind"> 
       <span class=" col-sm-1"></span> <input type="button" id = "btn_submit" class="btn btn-info col-sm-1" value="Add post" ></p> 

      </div> 

      <div class="row" id="middle"> 
       <div class="col-sm-8" id="left"> 
        <?php include ('selectAllPosts.php'); ?> 
       </div> 

       <div class="col-sm-4" id="right"> 
        <?php include ('select5Positions.php'); ?> 
       </div> 
      </div> 




     <!--Footer--> 
     <footer class="container-fluid text-center"> 
      <p class="glyphicon glyphicon-copyright-mark"> &nbsp;Created by ... </p> 
     </footer> 



     <script> 
     $(document).ready(function(){ 
     var timer = null; 
     function autoRefresh_div() 
      { 

       $('#left').load("selectAllPosts.php");// a function which will load data from other file after x seconds 

      } 
      $(document.body).keydown(function(event){ 
      clearTimeout(timer); 
      timer = setTimeout(setInterval(function(){ autoRefresh_div() }, 20000), 5000); 

      }); 



      $("#btn_submit").click(function(){ 
      var userName='<?php echo $FN; ?>'; 
      var content = $('#textField9').val(); 
      var postData = '&uname='+userName+'&content='+content; 
      $.ajax({ 
      url : "insertPost.php", 
      type: "POST", 
      data : postData, 
      success: function(data,status, xhr){ 
       if(data==="You have successfully posted!"){ 
        $('#textField9').val(''); 
       } 
       if(data==="ERROR"){ 
        $('#textField9').val(''); 
       } 
       } 
      }); 
    }); 






      $('#search').typeahead({ 
      name:'typehead', 
      remote: 'selectAllUsers.php?query=%QUERY' 
      }); 
      //search for all users and go to their pages 
      $('#search').on('typeahead:selected', function(evt, item){ 
      window.location.href = "userPage.php?fullName="+item.value; 
      }); 




      $.getJSON("../files/notifications.json",function(result){ 
       $.each(result, function (index, value) { 
        $(".forNotifications").append("<div class=\"divStyle1\">" +value.Notification + "</div>"); 
       }); 
      }); 


     $("#NL").click(function(){ 
      $("#NC2").hide(); 
      $("#NC1").hide(); 
     $("#NC").fadeToggle(300); 
     return false; 
     }); 
     $("#NL1").click(function(){ 
     $("#NC").hide(); 
     $("#NC2").hide(); 
     $("#NC1").fadeToggle(300); 
     return false; 
     }); 

     $("#NL2").click(function(){ 
     $("#NC").hide(); 
     $("#NC1").hide(); 
     $("#NC2").fadeToggle(300); 
     return false; 
     }); 

     $('#myButton').click(function(){ 
       $(this).hide(); 
      } 
    ); 

    }); 

     </script> 
     </body> 
    </html> 

ありがとうございました。

トム

+1

間隔を1秒ほど速く実行し、カウンタを更新します。カウンターが20になったら、リロードしてください。グローバルな「keypress」イベントハンドラを作成し、キーを押すたびにカウンタを0に戻します。 – Pointy

+2

ページを更新することは、この使用例では悪い考えです。 X秒ごとに新しい投稿を得るためにAjaxを使用することを検討しましたか?それはあなたの要求を小さくして、サーバーの作業が少なくて済むようにします。 – bassxzero

+0

間隔は私からの必要条件です。 – Tom

答えて

0

新しいデータを取得したり、(最も効率的である)のWebSocketを使用するには、AJAX要求を行うことのいずれかによってこれを行うことができ、複数の方法があります。しかし、問題を解決する最も簡単な方法は、ページが読み込まれたときにJS経由でタイマーを作成することです。

<!-- Element --> 
<input type="text" data-ui="post"/> 

<!-- Script --> 
<script> 
$(document).ready(function(){ 

    var timer = null; 

    function startTimer() { 
     timer = setInterval(function() { 
      window.location.reload(); 
     }, 1000); 
    } 

    // Stop timer by clearing with interval when 
    // the user focuses on the element 
    $('[data-ui]').on('focus', function() { 
     clearInterval(timer); 
    }); 

    // Start the timer once the user has blurred away from 
    // the element 
    $('[data-ui]').on('blur', function() { 
     startTimer(); 
    }); 

    // Start the timer as the page has finished loading 
    startTimer(); 

}) 
</script> 

基本的には、それに取り付けられた[データ-UI]属性タグを有する要素を集中してきたユーザ一度location.reloadタイマーウィンドウを停止します。もう1つの方法は、入力内容をLocalStorageで保存し、ページがリロードされたらその内容を入力ボックスに挿入することです。

jquerylessバージョンが必要な場合はお知らせください。

関連する問題