1

我想定期更新网页,并且我希望浏览器仅在页面可用时更新。正确的 nov 我正在使用这个:

<script language="javascript" type="text/javascript">
    $(document).ready(function() {
        setInterval("location.reload()", 66000);
    });   
</script>

如果由于某种原因页面不可用,是否可以不更新?

4

2 回答 2

3

您可以ajax提前检查一个微小的资源,例如:

$(document).ready(function() {
    setInterval(maybeRefresh, 66000);

    function maybeRefresh() {
        $.ajax({
            url:     "/path/to/tiny/resource",
            type:    "GET",
            success: function() {
                // That worked, do the full refresh
                location.reload();
            }
        });
    }
});

...但我倾向于认为你最好只load更新更新的内容。将所有主要内容放在一个带有 , 的元素中id "main",然后:

$(document).ready(function() {
    setInterval(function() {
        $("#main").load("/path/to/new/content");
    }, 66000);
});

这会将元素的内容替换为从to#main接收到的内容。如果失败,则不更新。GET/path/to/new/contentGET

我可能还会使用链式setTimeout而不是 asetInterval并通过尝试更积极地刷新来处理错误。就像是:

$(document).ready(function() {
    setTimeout(refresh, 66000);

    function refresh() {
        $.ajax({
            url: "/path/to/new/content",
            type: "GET",
            success: function(html) {
                // Success, update the content
                $("#main").html(html);

                // Reload in 66 seconds
                setTimeout(refresh, 66000);
            },
            error: function() {
                // Failed, try again in five seconds
                setTimeout(refresh, 5000);
            }
        });
    }
});
于 2013-01-15T22:32:43.957 回答
0

您可能想要使用 HTML5 缓存清单功能。为此,请在html元素的manifest属性中指定清单文件路径:

<!DOCTYPE HTML>
<html manifest="cache.manifest">

然后将网站的所有资源添加到清单文件中,例如:

CACHE MANIFEST
# v11
/index.html
/main/features.js
/main/settings/index.css
http://example.com/images/scene.jpg
http://example.com/images/world.jpg

现在,如果您对 index.html 执行 GET 请求,浏览器将仅在缓存清单文件可用且已更改时才会执行实际请求(为了强制更新,您可以在缓存清单注释中存储版本号并需要时更新它)。否则,页面将从浏览器的缓存中重新加载。

于 2013-01-15T22:36:58.427 回答