1

我有这个 javascript 函数,它为外部 PHP 脚本提供 AJAX 请求,<div>如果新检查与旧检查不同,我希望它自动更新 HTML。

<script>
window.setInterval(function()
{
  $(function () 
  {
    $.ajax({                                      
        url: 'api.php', data: "", dataType: 'json',  success: function(rows)        
        {
            for (var i in rows)
            {
                var row = rows[i];          
                var id = row[0];
                var vname = row[1];
                var Password = row[2]
                $('#output').append("<hr />").append("<b>id: </b>"+id+"<b> name: </b>"+vname+" <b>Password: </b>"+Password);
            } 
        } 
    });       
  });
 }, 5000);
  </script>

这目前成功地返回并使用数组中的内容更新了 div,问题是,由于添加了该window.setInterval(function()行,它将每 5 秒提供一次连接并<div>使用重复数据更新 .. 当我想要的时候,它会回显新数据(如果有的话)

这是我的另一个 PHP 脚本:

$STD = new mysqli ("localhost", "root", "hidden", "ajaxrequests");

        $array = array(); 
    $Query = $STD->prepare ("SELECT * FROM ajaxdata");
    $Query->execute();
    $Query->bind_result($ID, $Name, $Password);

    while ($Query->fetch())
    {
        $array[] = array ( $ID, $Name, $Password);
    }

  echo json_encode($array);
4

1 回答 1

0

只需empty()在循环之前添加一个调用即可。

<script>
window.setInterval(function()
{
  $(function () 
  {
    $.ajax({                                      
        url: 'api.php', data: "", dataType: 'json',  success: function(rows)        
        {
            $('#output').empty();
            for (var i in rows)
            {
                var row = rows[i];          
                var id = row[0];
                var vname = row[1];
                var Password = row[2]
                $('#output').append("<hr />").append("<b>id: </b>"+id+"<b> name: </b>"+vname+" <b>Password: </b>"+Password);
            } 
        } 
    });       
  });
 }, 5000);
 </script>

当然,如果您的数据量很大,这将不是非常理想的。我实际上建议让 PHP 服务器发送一个时间戳值及其响应。然后,您可以在后续的 AJAX 请求中将其传回,并让服务器确定自上一个时间戳以来是否有实际要传递的更新。然后,您可以让服务器只发送那些更新的记录,您可以像您已经在做的那样附加/更新这些记录。

于 2013-03-07T20:52:56.143 回答