我在自动刷新网页内容时遇到问题

Posted

技术标签:

【中文标题】我在自动刷新网页内容时遇到问题【英文标题】:I'm having problem on auto refreshing a content in a web page 【发布时间】:2019-04-24 01:41:46 【问题描述】:

我正在创建一个网页,该网页将自动刷新内容以始终获取数据库中的最新数据。这是我的 javascript 代码。

setInterval(function() 
    $("#status").load('refresh.php');
,1000);

在我的 javascript 中,我每秒使用 refresh.php 自动刷新 #status。

但是当我检查我的网页元素并点击网络时。它还每秒请求(垃圾邮件)refresh.php,我认为这是一种不好的做法。

你能帮我解决这个问题吗?或者你能建议更好的 ajax 代码来自动刷新内容而不需要太多的 php 文件吗?

【问题讨论】:

您如何改变这一点取决于这些更新对时间的敏感程度。您是正确的,每秒 ajax 请求会给服务器带来相当大的负载。如果您需要实时更新,请使用 websockets,否则需要平衡速度需求和您认为适合服务器的内容。例如,您可能决定每 10 分钟执行一次就足够了,只需相应地更改间隔延迟 【参考方案1】:

您可能应该为此使用 websocket,从服务器获取最新状态作为数据,然后使用 javascript 仅更改页面的该部分

【讨论】:

【参考方案2】:

每当#status 的新(请求)值等于当前值时,此代码将在稍后在timeouts.min 请求refresh.php。如果值不同,下次超时将再次为timeouts.min

var timeouts=
 min:1000, // min await timeout = 1s
 max:16000 // max await timeout = 16s
;
var currentTo = timeouts.min;

function setAutoRefresh( to )
  setTimeout( function() 
    var current = $("#status").text();// or .html()
    $("#status").load('refresh.php', function() 
      // if we are load a new value
      if( current !== $("#status").text()) 
        currentTo = timeouts.min;
      // if loaded value are same to current
       else 
        currentTo += timeouts.min; // or currentTo *= 2; for example
        if( currentTo > timeouts.max )
          currentTo = timeouts.max;
        
      
      console.log('Next #status refresh after ' + currentTo + 'ms');
      // Set a new timeout
      setAutoRefresh( currentTo );
    );
  , to);


// Set the first timeout
setAutoRefresh( timeouts.min );

【讨论】:

这也会发送垃圾邮件 resfresh.php 我认为 OP 希望避免。 不!仅当请求的值与当前值不同时,它的垃圾邮件。如果值相同,则此代码在上一个之后越来越多地发出请求 load() 是异步的,此代码假定它不是。您还应该正确解释它的作用以及它如何解决 OP 的问题 load() is asynchronous 谢谢!固定。

以上是关于我在自动刷新网页内容时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在打开网页时自动刷新一次?只要一次!

如何让访问网站时页面自动刷新两次?

为啥我进入路由器网页后会一直自动刷新?

新网页内容使用了旧的数据库,刷新就变空白,请问如何使数据库自动更新到新网页内容的数据信息

html代码 刷新后 网页跳转 不刷新 不跳转

UIWebview 中传入的提要自动刷新