onReady() 在浏览器恢复页面时不会执行 $.getJSON()

onReady() doesn't execute $.getJSON() when browser restores a page

本文关键字:执行 getJSON 浏览器 恢复 onReady      更新时间:2023-09-26

让我首先声明,当我打开新的浏览器页面并输入我的 Web 服务器的 URL 时,下面的代码工作正常,当我重新加载页面(F5 或 Ctrl-R)时也可以工作。
但是,如果我重新打开关闭的浏览器窗口并且浏览器恢复了我的旧选项卡,它只能部分工作:然后,今天的日期被更新并显示(请参阅下面的代码,非常简单),但getJSON()调用似乎没有执行。浏览器不断显示上一个会话中的数据。仅当我更新页面 (F5) 时,浏览器窗口中的数据才会更新。
我确定这不是服务器。还能是什么?

浏览器:火狐,铬,最新版本。

在索引中使用此代码.html

<script>
  $(document).ready(onReady());
</script>

和这个代码在帮助器.js

var onReady = function() {
  // Display current date
  var dateText = moment().format("dddd, Do MMMM YYYY");
  var dateHTML = "<h2>" + dateText + "</h2>";
  $("#date-col").append(dateHTML);
  :
  :
  // Retrieve data from server and display it
  var statText = "Statistics:";
  $.getJSON("courses/starter", function(data) {
    statText = statText.concat(" " + data.count + " starter");
    $.getJSON("courses/dessert", function(data) {
      statText = statText.concat(", " + data.count + " dessert");
      $("#statistics").text(statText);
    });
  });
}

您必须传递回调而不是立即执行函数。

尝试:

<script>
  $(document).ready(onReady);
</script>

$( document ).ready(handler)期望参数是一个函数表达式,稍后DOM准备就绪时执行

在您的示例中,您正在调用onReady()函数并且该函数不返回任何内容(undefined),因此执行将如下所示: $(document).ready(undefined);

要么使用像 $(document).ready(onReady); 这样的函数表达式,要么onReady()应该返回一个稍后要执行的函数。

速记会$(onReady)