如何使用 JavaScript 刷新页面?

How do I refresh a page using JavaScript?

提问人:luca 提问时间:3/23/2011 最后编辑:Mateen Ulhaqluca 更新时间:5/25/2023 访问量:3110842

问:

如何使用 JavaScript 刷新页面?

javascript jquery 刷新 重新加载

评论


答:

485赞 Thorben 3/23/2011 #1

这适用于所有浏览器

location.reload();

评论

0赞 A Friend 10/2/2020
如果您想知道它到底得到了多大的支持,这里是 我可以使用吗?
4183赞 Roy 3/23/2011 #2

使用 location.reload()。

例如,每当单击元素时重新加载:id="something"

$('#something').click(function() {
    location.reload();
});

该函数采用一个可选参数,该参数可以设置为强制从服务器而不是缓存重新加载。该参数默认为 ,因此默认情况下,页面可能会从浏览器的缓存中重新加载。reload()truefalse

评论

34赞 Yster 12/8/2015
这对我不起作用。不过这奏效了:window.location.href=window.location.href;
6赞 twharmon 10/6/2016
这对我不起作用。 并奏效了。window.location.href=window.location.href;location.href=location.href;
29赞 Sagar Naliyapara 4/25/2017
window.location.reload(true);将硬刷新,否则默认为 false
1赞 1/26/2019
跑吧!window.location.reload()
0赞 Dr. Red 2/4/2023
中的额外参数不是标准的,但大多数浏览器都支持它。MDN 文档中的一些讨论和历史。"...从未发布过任何 location.reload() 规范的一部分”location.reload(true)
216赞 David 3/23/2011 #3

我想有很多方法会起作用:

  • window.location.reload();
  • history.go(0);
  • window.location.href=window.location.href;

评论

42赞 AaronLS 6/13/2013
如果您的 URL 末尾有一个 #/hashbang,这将无济于事window.location.href=window.location.href;example.com/something#blah
18赞 Mark Amery 10/20/2015
如果有人想知道 和 之间有什么区别:没有。HTML 5 规范的相关部分 at w3.org/TR/html5/browsers.html#dom-history-go 明确规定它们是等价的:“当调用 go(delta) 方法时,如果该方法的参数被省略或值为零,则用户代理必须像调用 location.reload( 方法一样行事。location.reload()history.go(0)
0赞 Yster 12/8/2015
唯一对我有用的是这个: window.location.href=window.location.href;
0赞 Rohit Singh 4/1/2021
window.location.href=window.location.href对我有用
74赞 JohnP 3/23/2011 #4

你被宠坏了;以下任何一项工作:

  • window.location.href = window.location.href;
  • window.location.reload();
  • history.go(0);
123赞 Peter 9/30/2011 #5

如果您使用的是 jQuery,并且想要异步刷新页面的内容,则可以执行以下操作:

$.ajax({
    url: "",
    context: document.body,
    success: function(s,x){
        $(this).html(s);
    }
});

我在这里使用的方法是 Ajax jQuery。我在 Chrome 13 上测试了它。然后,我将代码放入将触发重新加载的处理程序中。URL 是 ,表示此页面""

请注意,这可能不是提问者所说的“刷新”的意思。通常,在通常的用法中,该术语是指以浏览器在用户单击浏览器用户界面中提供的“刷新/重新加载”按钮时的方式重新加载页面。然而,这并不是“刷新”的唯一可能含义,在特定情况下可能是首选。

此代码的作用是将新的和更新的内容获取到页面。它通过对新内容发出异步 HTTP 请求,然后用新的异步加载内容替换页面的当前内容来实现此目的。它的结果是刷新页面的内容,即使它的工作方式略有不同。

您必须选择您真正想要的,以及最适合您的特定用例的。

评论

6赞 PassKit 3/14/2013
像这样重新加载整个 HTML 的一个麻烦是必须手动调用 onload/ready 事件,并减轻对先前声明的变量的覆盖,您可能希望在刷新后保留这些变量的状态。
3赞 Lucy Llewellyn 9/7/2013
除非您非常小心地处理代码,否则这将导致内存泄漏,其中您附加了事件处理程序等,而没有在替换它们附加到的代码之前分离它们。
0赞 William Entriken 2/14/2014
我用它来每秒重新加载我们的仪表板,零闪烁!这是穷人的彗星/json api。感谢 @DanielLlewellyn 等人的警告。
0赞 William Entriken 2/14/2014
这种方法的小问题在以下位置讨论:stackoverflow.com/questions/21761931/...
5赞 Mark Amery 10/20/2015
一些人评论说,这种方法只对刷新页面的一部分很有用。事实并非如此。我认为这些人误解了 $.ajax 的参数,并期望它以某种方式执行某种魔术。它所做的只是设置回调函数的 this。Ajax 到 URL 将命中您当前所在的 URL,从而通常会加载完整的 HTML(包括 和 ),并且此答案中的任何内容都不会过滤掉您不想要的内容。context""<html><head><body>
114赞 SumairIrshad 6/22/2012 #6

如果当前页面是由 POST 请求加载的,则可能需要使用

window.location = window.location.pathname;

而不是

window.location.reload();

因为如果在由 POST 请求加载的页面上调用,将提示确认。window.location.reload()

评论

13赞 mrmillsy 11/15/2013
但是,这将丢失查询字符串,而 window.location = window.location 不会
1赞 Mark Amery 10/20/2015
然而,@mrmillsy也是不完美的。如果当前 URL 中存在 fragid (hashbang),则不执行任何操作。window.location = window.location
519赞 Ionică Bizău 6/23/2013 #7

多种无限的方法可以使用 JavaScript 刷新页面:

  1. location.reload()
  2. history.go(0)
  3. location.href = location.href
  4. location.href = location.pathname
  5. location.replace(location.pathname)
  6. location.reload(false)

    如果我们需要从中提取文档 再次的 Web 服务器(例如文档内容所在的位置 动态更改),我们将参数作为 .true

您可以继续保持列表的创意:

  • window.location = window.location
  • window.self.window.self.window.window.location = window.location
  • ...等534种方式

var methods = [
  "location.reload()",
  "history.go(0)",
  "location.href = location.href",
  "location.href = location.pathname",
  "location.replace(location.pathname)",
  "location.reload(false)"
];

var $body = $("body");
for (var i = 0; i < methods.length; ++i) {
  (function(cMethod) {
    $body.append($("<button>", {
      text: cMethod
    }).on("click", function() {
      eval(cMethod); // don't blame me for using eval
    }));
  })(methods[i]);
}
button {
  background: #2ecc71;
  border: 0;
  color: white;
  font-weight: bold;
  font-family: "Monaco", monospace;
  padding: 10px;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.5s ease;
  margin: 2px;
}
button:hover {
  background: #27ae60;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

评论

12赞 Cԃաԃ 6/25/2013
+1 表示列表和 jsfiddle。我有一个问题,在 jsfiddle 1 和 6 中,生成的页面在重新加载时消失片刻,而 2-5 使页面重新加载“不明显”。在 chrome 的开发工具中,我可以看到正在重新生成的页面,但您能解释一下重绘过程是偏离的吗?请。先谢谢你。
0赞 Ionică Bizău 7/9/2013
@C我看不出有什么区别......也许缓存是问题所在?我很快就会看一看。
2赞 Cԃաԃ 7/19/2013
1 和 6 较慢。嗯。有趣。:)1 和 6 与 的默认参数相同。(reload()/(false))reload()false
1赞 Amal Murali 12/26/2013
location.href = location.href是我平时用的,但谢谢其他人。非常有用!+1
1赞 Ionică Bizău 12/31/2013
@C终于可以复制你所看到的了,我在这里问。
18赞 Suleman Mirza 6/25/2013 #8

jQuery 函数还可以执行页面刷新:Load

$('body').load('views/file.html', function () {
    $(this).fadeIn(5000);
});

评论

4赞 Mark Amery 10/20/2015
不,这不是页面刷新。
58赞 Pinch 7/25/2013 #9

您可能希望使用

location.reload(forceGet)

forceGet是一个布尔值和可选值。

默认值为 false,这将从缓存中重新加载页面。

如果要强制浏览器从服务器获取页面以摆脱缓存,请将此参数设置为 true。

或者只是

location.reload()

如果您想快速轻松地进行缓存。

27赞 user762330 10/14/2013 #10

window.location.reload()将从服务器重新加载,并再次加载您的所有数据、脚本、图像等。

因此,如果您只想刷新 HTML,则返回速度会更快,流量更少。但是,如果 URL 中有哈希 (#),则不会重新加载页面。window.location = document.URL

评论

0赞 Mark Amery 10/20/2015
这种行为至少在 Chrome 中是正确的 - 即使没有参数,也会强制重新验证缓存资源,同时只要缓存资源是最新的,它就很乐意在不访问服务器的情况下提供缓存资源。location.reload()window.location = document.URL
18赞 Fer To 10/2/2015 #11

由于这个问题是通用的,让我们尝试总结一下答案的可能解决方案:

简单的纯 JavaScript 解决方案

最简单的方法是以适当的方式放置单行解决方案:

location.reload();

许多人在这里缺少的是,因为他们希望得到一些“分数”,因为 reload() 函数本身提供了一个布尔值作为参数(详细信息:https://developer.mozilla.org/en-US/docs/Web/API/Location/reload)。

Location.reload() 方法从当前 网址。它的可选唯一参数是一个布尔值,当它 true,则使页面始终从服务器重新加载。如果是 false 或未指定,浏览器可能会从其 缓存。

这意味着有两种方法:

解决方案 1:强制从服务器重新加载当前页面

location.reload(true);

解决方案2:从缓存或服务器重新加载(基于浏览器和您的配置)

location.reload(false);
location.reload();

如果你想将它与jQuery结合起来,监听一个事件,我建议使用“.on()”方法而不是“.click”或其他事件包装器,例如,更合适的解决方案是:

$('#reloadIt').on('eventXyZ', function() {
    location.reload(true);
});
46赞 Mark Amery 11/14/2015 #12

具有不同缓存相关行为的三种方法:

  • location.reload(true)

    在实现 参数的浏览器中,通过获取页面及其所有资源(脚本、样式表、图像等)的新副本来重新加载。不会从缓存中提供任何资源 - 从服务器获取新副本,而无需在请求中发送任何 OR 标头。forcedReloadlocation.reload()if-modified-sinceif-none-match

    相当于用户在可能的情况下在浏览器中执行“硬重新加载”。

    请注意,在 Firefox(参见 MDN)和 Internet Explorer(参见 MSDN)中支持传递 to,但并非普遍支持,并且不是 W3 HTML 5 规范、W3 HTML 5.1 规范草案WHATWG HTML Living Standard 的一部分。truelocation.reload()

    在不支持的浏览器(如 Google Chrome)中,其行为与 相同。location.reload(true)location.reload()

  • location.reload() 或 location.reload(false)

    重新加载页面,获取页面 HTML 本身的全新非缓存副本,并对浏览器缓存的任何资源(如脚本)执行 RFC 7234 重新验证请求,即使它们是新的,RFC 7234 允许浏览器在不重新验证的情况下提供它们。

    据我所知,浏览器在执行调用时应如何利用其缓存的确切方式没有指定或记录;我通过实验确定了上述行为。location.reload()

    这相当于用户只需按下浏览器中的“刷新”按钮即可。

  • location = location(或涉及分配给其属性的无限其他可能的技术)location

    仅当页面的 URL 不包含 fragid/hashbang 时才有效!

    重新加载页面,而不从缓存中重新提取或重新验证任何资源。如果页面的 HTML 本身是最新的,这将重新加载页面,而无需执行任何 HTTP 请求。

    这等效于用户(从缓存的角度来看)在新选项卡中打开页面。

    但是,如果页面的 URL 包含哈希值,则不会产生任何影响。

    同样,据我所知,这里的缓存行为是未指定的;我通过测试确定了它。

因此,总而言之,您希望使用:

  • location = location为了最大限度地利用缓存,只要页面的 URL 中没有哈希值,在这种情况下,这将不起作用
  • location.reload(true)获取所有资源的新副本,而无需重新验证(尽管它不是普遍支持的,并且与某些浏览器(如 Chrome)中的行为没有什么不同)location.reload()
  • location.reload()忠实地再现用户点击“刷新”按钮的效果。

评论

0赞 brandito 2/16/2018
+1 表示位置 = 位置;虽然它比提供的大多数答案短,但似乎没有多少人建议它,唯一的缺点是它的可读性,而 location.reload() 更具语义性
0赞 Mark Amery 2/16/2018
@Brandito 更重要的是,如果 URL 中有哈希值,则不起作用。对于任何使用 fragids 的网站 - 甚至对于任何链接到页面的人可能会向 URL 添加 fragid 的网站 - 这会使它损坏。location = location
16赞 William Entriken 5/18/2016 #13

下面是一个使用 jQuery 异步重新加载页面的解决方案。它避免了 引起的闪烁。此示例显示一个连续重新加载的页面,就像在仪表板中一样。它经过了实战考验,并在时代广场的信息显示电视上运行。window.location = window.location

<!DOCTYPE html>
<html lang="en">
  <head>
    ...
    <meta http-equiv="refresh" content="300">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>
    <script>
    function refresh() {
      $.ajax({
        url: "",
        dataType: "text",
        success: function(html) {
          $('#fu').replaceWith($.parseHTML(html));
          setTimeout(refresh,2000);
        }
      });
    }
    refresh();
    </script>
  </head>
  <body>
    <div id="fu">
      ...
    </div>
  </body>
</html>

笔记:

  • 直接使用 like 会导致 css/js 文件被缓存破坏,即使你使用 ,这就是我们使用$.ajax$.get('',function(data){$(document.body).html(data)})cache: trueparseHTML
  • parseHTML 不会找到 body 标签,所以你的整个身体需要进入一个额外的 div,我希望这些知识有一天能帮助你,你可以猜到我们是如何选择 id 的div
  • 使用以防万一 javascript/server 打嗝出现问题,那么页面仍然会重新加载,而不会接到电话http-equiv="refresh"
  • 这种方法可能会以某种方式泄漏内存,刷新可以修复http-equiv
15赞 Mujah Maskey 9/16/2016 #14

我发现

window.location.href = "";

window.location.href = null;

还会刷新页面。

这使得重新加载页面删除任何哈希值变得非常容易。 当我在 iOS 模拟器中使用 AngularJS 时,这非常好,这样我就不必重新运行该应用程序。

11赞 Poorna Senani Gamage 3/6/2018 #15

您可以使用 JavaScript 方法。 此方法接受布尔参数。 或。如果参数为 ;页面始终从服务器重新加载。如果是 ;这是默认值,或者使用空参数浏览器从其缓存中重新加载页面。location.reload()truefalsetruefalse

带参数true

<button type="button" onclick="location.reload(true);">Reload page</button>

使用 / 参数defaultfalse

 <button type="button" onclick="location.reload();">Reload page</button>

使用 jquery

<button id="Reloadpage">Reload page</button>
<script type="text/javascript">
    $('#Reloadpage').click(function() {
        location.reload();
    }); 
</script>
3赞 J. Moreno 7/25/2018 #16

如果你正在使用 jQuery 并想要刷新,那么请尝试在 javascript 函数中添加你的 jQuery:

我想在单击时从页面中隐藏 iframe哦,对我来说它有效,但我无法单击允许我查看的项目,除非我手动刷新浏览器......不理想。h3iframe

我尝试了以下方法:

var hide = () => {
    $("#frame").hide();//jQuery
    location.reload(true);//javascript
};

将普通的 Jane javascript 与 jQuery 混合应该可以工作。

// code where hide (where location.reload was used)function was integrated, below    
    iFrameInsert = () => {
        var file = `Fe1FVoW0Nt4`;
        $("#frame").html(`<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/${file}\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen></iframe><h3>Close Player</h3>`);
        $("h3").enter code hereclick(hide);
}

// View Player 
$("#id-to-be-clicked").click(iFrameInsert);
0赞 Na Nonthasen 10/27/2018 #17

它在 JavaScript 中最短。

window.location = '';
1赞 Kamil Kiełczewski 10/28/2019 #18

可能最短(12 个字符) - 使用历史记录

history.go()
3赞 infomasud 11/8/2019 #19

您可以通过两种方式编写它。第1种是重新加载页面的标准方法,也称为简单刷新

location.reload(); //simple refresh

另一种称为硬刷新。在这里,您传递布尔表达式并将其设置为 true。这将重新加载页面,销毁较旧的缓存并从头开始显示内容。

location.reload(true);//hard refresh
0赞 Charles Masgalas 5/25/2023 #20

您可以简单地使用 .location.reload()

document.querySelector("button").addEventListener("mousedown", function () {
  location.reload(); // reloads the page
}, false);
* {
  margin: 0px;
  padding: 0px;
}

button {
  background-color: #90ffc9;
  border: 1px solid #000000;
  border-radius: 4px;
  outline: none;
  padding: 1%;
  top: 50%;
  left: 50%;
  position: absolute;
  transform: translate(-50%, -50%);
  transition: background-color 350ms;
}
button:hover {
  background-color: #80af99;
  cursor: pointer;
}
<button>
  Reload
</button>