【问题标题】:Can we have code after location.reload(true)?我们可以在 location.reload(true) 之后有代码吗?
【发布时间】:2019-02-11 01:03:24
【问题描述】:

我有一个从服务器重新加载的函数:

location.reload(true)

目前,我在此行之后的任何代码都不会执行。

我很好奇是否有办法在重新加载后运行更多代码?

【问题讨论】:

  • 当您重新加载页面时,脚本也会重新加载,就像程序重新启动一样。因此,代码不会在它之后运行。如果您想在那之后做某事,您可能不应该重新加载。你能给我们一些背景吗?
  • 我不明白。你的额外代码有什么作用?你不能先执行代码然后重新加载吗?
  • 你确定你还需要location.reload(true)吗?现在是 2018 年,AJAX 得到了很好的支持,只更新了部分内容就不需要重新抓取整个页面。

标签: javascript reload


【解决方案1】:

最好的方法是编写一个函数,如果设置了某些“GET”变量,则调用该函数并在每次运行时检查它们,例如mypage.html?reload=true

甚至是哈希位置:mypage.html#reload

你可以这样比较:

$(document).ready(function () {
  if (window.location.hash == '#reload') {
    onReload();
  }
});

function onReload () {
  console.log('test');
}

function reload () {
  window.location.hash = 'reload';
  window.location.reload();
}

只需调用reload(); 函数即可。

输出(在控制台中):test

然后,如果您不希望您的函数在页面再次刷新时运行,您可以将人们从哈希 #reload 重定向:window.location.hash = '';

【讨论】:

  • 很抱歉很长时间才回复您。我刚刚了解了投票和 cmets,感谢您的努力。
【解决方案2】:

为什么你需要在重新加载页面后执行一些东西?

如果您需要在重新加载后执行某些操作,那么您可以将一些参数传递给页面并检查它以执行其他操作。您可以重定向到同一页面并传递完整的url

var url = window.location.href; 
url += '&param=1'
window.location.href = url;

因此,当您的页面重新加载时,您可以通过 GET 来检查一个参数,然后做任何您想做的事情。希望这个技巧能帮到你!

【讨论】:

    【解决方案3】:

    ________________方法 1:使用 PHP___

    1) 使用参数重新加载

    2) 使用 PHP 获取该参数

    例如:

    window.location.href += '&reloading=1';
    //it's equivalent to:
    //window.location.href = window.location.href + '&reloading=1';
    

    然后:

    <?php
    if (isset($_GET['reloading'])) {
        echo '<script>pageReloaded();</script>';
    }
    ?>
    

    由于 PHP 会先被执行,那个小脚本(函数调用)会被编写并在 javascript 中执行,所以 pageReloaded() 函数会被调用。

    一个完整的例子是:

    <?php if (isset($_GET['reloading'])) echo '<script>pageReloaded();</script>'; ?>
    <script>
        function reloadNow(){
            alert("I'm about to reload");
            window.location.href += '&reloading=1';
        }
        function pageReloaded(){
            alert("I've been reloaded!");
        }
    </script>
    
    <button onclick="reloadNow()">Press to reload</button>
    

    ________________方法 2:没有 PHP,只有 JAVASCRIPT_________________

    使用SessionStorage

    1) 设置 SessionStorage。

    2) 重新加载

    3) 获取 SessionStorage

    例如:

    <script>
        function reloadNow(){
            alert("I'm about to reload");
            sessionStorage.setItem('reloading',"true");
            window.location.reload(true);
        }
    
        //when loading:        
        if (sessionStorage.getItem('reloading') === "true") {
            sessionStorage.clear(); //so it doesn't trigger next time
            alert("I've been reloaded!");
        }
    </script>
    
    <button onclick="reloadNow()">Press to reload</button>
    

    【讨论】:

    • 这里不需要php,它可以纯粹由javascript处理,服务器端调用非常费力。
    • @NotoriousPyro OP 正在执行location.reload(true),因此无论如何都完成了对服务器端的调用。
    • 不,php(动态页面)和静态js文件之间的区别是巨大的。 php 必须从服务器重新加载,js 可以从客户端缓存中加载。
    • @NotoriousPyro。我编辑了答案以包含仅客户端解决方案
    • 非常感谢您的这些好评。我会马上检查他们!
    猜你喜欢
    • 2021-01-02
    • 2023-03-04
    • 2015-08-30
    • 2012-03-26
    • 2011-09-05
    • 1970-01-01
    • 2013-09-16
    • 2020-06-15
    • 2016-12-22
    相关资源
    最近更新 更多