【问题标题】:Auto refresh a webpage on content update only仅在内容更新时自动刷新网页
【发布时间】:2013-10-30 06:28:41
【问题描述】:

我在我的网站上创建了一个网页,该网页每 1-60 分钟(随机/变化)获取内容更新,起初我使用以下方法自动刷新网页:

<meta http-equiv="refresh" content="30" >

但是,这在滚动和通常使用网页时非常烦人。

我曾想过在单独的网页上使用 iframe,如下所示:

<iframe src="output.html" width="2500" height="10000" frameborder="0" allowfullscreen></iframe>

但是,这又会引发更多问题,因为它不刷新(如果我删除元标记),并且我的原始网页高度会根据页面上的数据量而有所不同。

我正在寻找一些建议/代码帮助,以获取仅在内容更新时刷新主网页的方法。 (建议的解决方案是 HTML、PHP 还是任何其他语言都没有关系)

任何建议或建设性的cmet将不胜感激。

提前致谢
- 海福克斯

编辑:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="5" >
<title>data data data data data</title>
<style type="text/css">
<!--
@import url("style.css");
-->
</style>
</head>
<body>
<table id="gradle" summary="main">
    <thead>
        <tr>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">data Rank</th>
            <th scope="col">data Odds</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">AV10</th>
            <th scope="col">data Rank</th>
            <th scope="col">data</th>
            <th scope="col">data Rank</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">Age</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">data 14 Day</th>
            <th scope="col">data CSR</th>
            <th scope="col">data TSR</th>
            <th scope="col">data</th>
            <th scope="col">data 14 Day</th>
            <th scope="col">data CSR</th>
            <th scope="col">data TSR</th>
            <th scope="col">data</th>
            <th scope="col">data data</th>
            <th scope="col">data data</th>
            <th scope="col">data data</th>
            <th scope="col">data data</th>
            <th scope="col">data data</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
            <th scope="col">data</th>
        </tr>
    </thead>
    <tbody>
        <tr><td>data</td><td>data</td><td>data data</td><td>data</td><td>data</td><td>5f 212y</td><td><div align="left">2</div></td><td>117.88</td><td>1</td><td>117.88</td><td>1</td><td>-1</td><td>&nbsp;</td><td>2</td><td>22</td><td>data</td><td>14</td><td>data</td><td>data</td><td>Tdata</td><td>6</td><td>data</td><td>135.0%</td><td>data</td><td>555.0%</td><td>0.0%</td><td>10.0%</td><td>2</td><td>data</td><td>data</td><td>&#163;45552.43</td><td></td><td>data</td><td>data</td><tr>
     </tbody>
     </table>
</body>
</html>

感谢下面的帖子,我最接近的是:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
    update_content()
    $(document).ready(function (e)
    {
        var refresher = setInterval("update_content();", 250);
    })

    function update_content()
    {
        $.ajax(
        {
            type: "GET",
            url: "output.html",
            timeout: 10000,
            cache: false,
        })
            .done(function (page_html)
            {
                var newDoc = document.documentElement.innerHTML;
                if (page_html != newDoc)
                {
                    alert("LOADED");
                    var newDoc = document.open("text/html", "replace");
                    newDoc.write(page_html);
                    newDoc.close();

                }
            });
    }
</script>

【问题讨论】:

  • 您可以使用客户端库吗?喜欢Knockout.js?就像你说的那样,它非常适合要求。
  • 我看过它,但无法从中得到任何工作,我所需要的最接近我需要的是 Websters 代码,它几乎适合我的需要。
  • 它真的对你有用吗? newDoc 删除 doctype 声明和 html 标签...

标签: javascript php jquery html


【解决方案1】:

http://jsfiddle.net/Ask3C/

您必须将路径替换为您的页面之一。应该每 30 秒重写一次文档。这是一种 hack 方法,但如果您仍在使用 Meta Refresh - 它会好很多光年。搏一搏。 jQuery 库的脚本只是从 Google 存储库中提取的。

$(document).ready(function(e) {
    var refresher = setInterval("update_content();",30000); // 30 seconds
})

function update_content(){

    $.ajax({
      type: "GET",
      url: "index.php", // post it back to itself - use relative path or consistent www. or non-www. to avoid cross domain security issues
      cache: false, // be sure not to cache results
    })
      .done(function( page_html ) {
        alert("LOADED");
    var newDoc = document.open("text/html", "replace");
    newDoc.write(page_html);
    newDoc.close();

    });   

}

【讨论】:

  • 我尝试根据自己的需要调整它,但它不能正常工作:/ 请参阅我的原始帖子。另外我应该提到我的 html 表相当大,例如,如果我将更新设置为 1000(1 秒),它会使浏览器非常糟糕。由于表大小如此之大,是否可以循环遍历每个表块并更新有什么不同的表块? (有些行可能会被删除)
  • 这有多可靠?我需要在浏览器中每分钟刷新一次图像以监控工业过程。我需要知道这不会只工作一段时间然后毫无警告地失败。
  • 这可行,但会使页面在更新时闪烁。有什么办法修复吗?
  • @RedClover 刷新前验证接收到的数据内容是否有变化,如果有变化,刷新,如果没有,就什么都不做,我猜
【解决方案2】:

您的问题很常见。您是否探索过 twitter 之类的提要更新是如何工作的?你必须这样做

var interval = function() {

    setTimeout(function() {

        $.ajax({

            // Ajax options goes here
            success : function(data) {
                // Process Data
                // Generate HTML
                // Insert Generated HTML whereever you want in document
                interval() //Initiate next fetch
            }
        })

    }, 1000 // Interval time
    );
};

注意:这里我使用的是 jQuery ajax。

希望这会给你一个想法。

【讨论】:

  • 我尝试了其他人的代码并尝试对其进行一些调整,但它无法正常工作,我已经尝试过你的,但我的尝试更糟。
【解决方案3】:

一个好的解决方案是使用 javascript 并以设定的时间间隔进行 ajax 调用。然后使用您的响应中的新内容更新任何元素。这样您就不必处理非常烦人的刷新。

【讨论】:

  • 主网页只是一些简单的 html 页面,其中包含一个完整的目录。添加了我的代码示例。我不确定如何编写 ajax / javascript 调用来执行此操作。
  • @Hyflex 我建议查看jQuery 及其 $.ajax() 函数来帮助您对服务器进行 ajax 调用。
猜你喜欢
  • 2019-11-23
  • 2018-12-30
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2015-09-06
  • 1970-01-01
相关资源
最近更新 更多