Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果内容更改,是否自动刷新JS数组?_Php_Javascript_Ajax - Fatal编程技术网

Php 如果内容更改,是否自动刷新JS数组?

Php 如果内容更改,是否自动刷新JS数组?,php,javascript,ajax,Php,Javascript,Ajax,我有一个javascript函数,它向外部PHP脚本提供AJAX请求,如果新检查与旧检查不同,我希望它自动更新HTML <script> window.setInterval(function() { $(function () { $.ajax({ url: 'api.php', data: "", dataType: 'json', success: function(

我有一个javascript函数,它向外部PHP脚本提供AJAX请求,如果新检查与旧检查不同,我希望它自动更新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>
只需在循环之前添加一个对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请求中传回此消息,并让服务器确定自上次时间戳之后是否有要交付的更新。然后,您可以让服务器只发送那些更新后的记录,您可以将这些记录追加/更新,就像您已经执行的那样。

为什么要使用追加而不是只写入整个输出?或者,如果您想处理JSON字符串本身,并且假设JSON字符串不是太大,那么您可能只需将最新的字符串存储到一个变量中,将其与传入字符串进行比较,如果它们匹配,则不做任何操作。如果它们不匹配,则使用新数据覆盖整个DOM元素。@MikeBrant您能提供一个示例吗?@MikeBrant此外,在设置时,它已经每5秒发送一次请求并存储响应。为什么不用每个请求替换内容呢?比较返回的内容和当前内容将比简单地更新DOM花费更长的时间,因为浏览器缓存非常高效。如果您的响应非常大,那么您可能希望在服务器端对其进行散列,并且只在浏览器端比较散列以检查更新。ajaxdata是否具有自动递增的id?如果有一个javascript变量存储最后提取的id。然后将其作为POST或GET数据添加到ajax调用中。然后只提取新条目并将其与新的最后一个id一起发送。只有在收到新数据时才附加到html。@是的,ajaxdata为id列设置了一个_I,但答案已被排序。我将+1,但我没有15 re。但我会在计时器启动时接受这个答案。谢谢你的回复,我不是要你举个例子。。但按照我的理解,有没有更简单的方法来解决这个问题?一个简单的“是”或“否”答案就可以了surfice@user2146021与编程世界中的一切一样,最好的方法通常是特定于您的用例的。如果我处理的是大型数据集,我当然不希望每5秒钟传递一次完整的数据集,然后要求客户端浏览器对其进行完整更新。我将研究只在服务器和客户端之间传递增量数据更改的方法。您目前的方法很简单,在可预见的未来可能会满足您的需求。只有您可以决定是否值得您的努力来实现更优化的方法。
<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>