0

我为之工作的客户正在努力做到这一点,以便他的页面永远不必重新加载。相反,他只想使用 AJAX。现在我意识到我这样做的方式不是一种非常有效的方式,但它是最简单的,如果你看到他的网站,你就会明白为什么..

我试图让它工作,以便 AJAX 只刷新页面的一部分或整个页面。

我的代码是:

<!doctype html>
<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
        <script>
            function refresh (update) {
                $.get(location.href, function (data) {
                    console.log(data);
                    var EL = $(data).find(update);
                    var HTML = $('<div>').append(EL.clone()).html()
                    alert(HTML);
                    $(update).replaceWith(HTML);
                });
            }
        </script>
    </head>
    <body>
        <div style="font-size: 64px;">The current timestamp is <b class="time"><?php echo rand(999, 9999999); ?></b></div>
        <br><br>
        <button onclick="refresh('.time')">Refresh Time</button>
    </body>
</html>

当您第一次加载页面时,PHP 会生成一个随机数。点击刷新按钮是为了刷新这个数字。但是,相同的数字仍然存在。该请求返回完全相同的页面,而不是返回具有新编号的页面。

再一次,人们注意到我知道这不是一种非常有效的方法,但它是我试图让它发挥作用的方式

难道我做错了什么?(除了在实际使用部分时请求整个页面)

编辑

你可以在这里试试:http: //methods.x10.mx/projects/refreshPageParts.php

4

2 回答 2

2

将您的调用更改为此,以中断缓存:

function refresh (update) {
    $.ajax({
        type: "get",
        cache: false,
        url: location.href,
        success: function (data) {
            $(update).replaceWith($(data).find(update));
        }
    });
}

请参阅文档中有关缓存的说明:http ://api.jquery.com/jQuery.ajax/

默认情况下,总是发出请求,但浏览器可能会从其缓存中提供结果。要禁止使用缓存的结果,请将缓存设置为 false。如果自上次请求以来尚未修改资产,要使请求报告失败,请将 ifModified 设置为 true。

于 2013-09-18T22:28:36.473 回答
-1

我在我当地的 wamp 堆栈上测试了你的例子,它工作正常!

顺便说一句:您在以下行之后忘记了分号(虽然没有必要)

var HTML = $('<div>').append(EL.clone()).html();

编辑:您的代码正在运行......也在您提供的网址上。奇怪的是你必须等待几分钟才能工作。因此,当您访问该页面并按下按钮时,时间不会更新......但是,如果您等待几分钟,它将......只有一次,然后您必须再次等待。我敢打赌你的服务器正在缓存页面。所以你的问题是服务器端......禁用缓存,它会工作!

编辑:您也可以尝试使用像这样的虚拟参数使 get url 动态化

http://methods.x10.mx/projects/refreshPageParts.php?v=dummy

也许您不必使虚拟动态,它也可以与静态变量一起使用。我很好奇,让我知道;-)

于 2013-09-18T22:39:23.083 回答