虽然循环在刷新div时被杀死了

时间:2015-11-19 18:57:04

标签: javascript php jquery

我有这个JavaScript代码每5秒刷新一次watcher.php文件,效果很好。第一页加载很好但是在5秒之后等等while循环被杀死了。有什么原因吗?

index.php

<script type="text/javascript">
  var auto_refresh = setInterval(function(){
    $('.view').load('watcher.php');
  }, 5000); // refresh div time
</script>

<body>
  <div class="view">
    <?php include 'watcher.php'; ?>
  </div>
</body>
...

watcher.php

include 'config.php';

$sql = "SELECT id, name, available, will_return, status  FROM check_in_out";
$result = $conn->query($sql);

echo '<div style="margin-top:35px;"><center>';

echo '<table class="pure-table">
<thead>
<tr>
    <th>Name</th>
    <th>Available</th>
    <th>Status/Comments</th>
    <th>I\'ll Return At:</th>
    <th>Returned</th>
</thead>
</tr>
';

if ($result->num_rows > 0) {
    $i = 1;
    // output data of each row 
    while ($row = $result->fetch_assoc()) {
        echo '<tr>';
        echo '<td><img style="vertical-align:middle" src="imgs/card.jpg"> <a class="various" href="#'.$i.'"/>'.$row["name"];'</a></td>';
        echo "<td>"; 
            if ($row['available'] == 1) {
                echo "<img src='imgs/available.gif'/>";
                echo "Online";
            } else {
                echo "<img src='imgs/not-available.gif'/>";
                echo "<span style='vertical-align:middle'>Away</span>";
            };
        echo "</td>";
        echo '<td>'.$row["status"];'</td>';
        echo '<td>'.$row["will_return"];'</td>';
        echo '<td></td>';
        echo '</tr>';
        echo '<div align="center" id="'.$i++.'" style="display:none;width:520px;">
            <h2>'.$row["name"].'</h2>
            <!-- <h4>Current Status: '.$row["status"].'</h4> -->

            <form method="post" action="statusChange.php" />
            <input type="hidden" value="'.$row["id"].'" name="id"/>

            <textarea rows="4" cols="50" placeholder="Enter Comment/Status Here..." name="comment"></textarea>
            <br/><br/>
            When will you return? - <input type="time" name="e_time">
            <br/><br/>
            <input class="pure-button pure-button-primary" type="submit" value="Leave/Return"> 
            </form> 
        </div>';
       }
} else { 
    echo "0 employees";
}

echo '</tr></table>';
echo '</div></center>';

$conn->close();




UPDATE:

这是看下面的图像。你会注意到在第一次加载(5秒)后,可点击的(href)被杀死了......

enter image description here

1 个答案:

答案 0 :(得分:2)

<script type="text/javascript">
var updateWatcher = function() {

   $.ajax({
      url: 'watcher.php',
      success: function(response) {

         $('.view').html(response);

         window.setTimeout(function(){
             updateWatcher();
         }, 3500);
      }
   });

}

updateWatcher();
</script>

当然,这可以用promises之类的东西更优雅地解决,但就简单的修复而言,你可以尝试这样的事情,只有在成功收到响应后才设置定时器。这应该更可靠。

这是一个简单的小提琴:http://jsfiddle.net/agentfitz/26mahomm/3/(在控制台中查看)。