Javascript 为什么window.onload只在某些时候被调用刷新?

Javascript 为什么window.onload只在某些时候被调用刷新?,javascript,Javascript,很明显,我的JavaScript代码是有效的。我使用window.onload调用一个初始函数,该函数获取时间和日期,并通过XMLHttpRequest将其发送到远程服务器。在调试过程中,我简化了初始函数,只是为了在屏幕上显示时间和日期,而不是其他 我发现当我执行后一个刷新时,并不总是会导致调用window.onload。即使使用Crtl+F5也很少改变时间。最后,将剩下的代码放回(调用服务器),每次刷新都能正常工作 下面的代码似乎没有为每次刷新调用onload事件。但是,如果删除由注释包围的r

很明显,我的JavaScript代码是有效的。我使用window.onload调用一个初始函数,该函数获取时间和日期,并通过XMLHttpRequest将其发送到远程服务器。在调试过程中,我简化了初始函数,只是为了在屏幕上显示时间和日期,而不是其他

我发现当我执行后一个刷新时,并不总是会导致调用window.onload。即使使用Crtl+F5也很少改变时间。最后,将剩下的代码放回(调用服务器),每次刷新都能正常工作

下面的代码似乎没有为每次刷新调用onload事件。但是,如果删除由注释包围的return语句,则每次刷新都会调用window.onload

虽然我不应该抱怨我的完整代码可以工作,但我想知道为什么简单版本不能工作

<script>
window.onload = loadDoc();

function loadDoc() {

var today = new Date();
var date = today.getFullYear()+'-'+
  ( (today.getMonth()+1)<10 ? "0"+(today.getMonth()+1) : (today.getMonth()+1) ) +'-'+ 
  ( (today.getDate() +1)<10 ? "0"+(today.getDate() +1) : (today.getDate() +1) );
var time = ( (today.getHours())<10 ? "0"+(today.getHours()) : (today.getHours()) ) + ":" + 
            ( (today.getMinutes())<10 ? "0"+(today.getMinutes()) : (today.getMinutes()) ) + ":" + 
           ( (today.getSeconds())<10 ? "0"+(today.getSeconds()) : (today.getSeconds()) );

var dateTime = date+' '+time;

  document.getElementById("myBanner").value=dateTime;

///////////////////////////////
return; //////remove this return and every refresh calls this function
///////////////////////////////

  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200)  {
      document.getElementById("myBanner").value = this.responseText;
    }
  };
  string = "http://example.com/cgi-bin/perly.pl?b=1&d=" + dateTime;
  xhttp.open("GET", string, true);
  document.getElementById("myBanner").value="sent";
  xhttp.send();
}

window.onload=loadDoc();
函数loadDoc(){
var today=新日期();
var date=today.getFullYear()+'-'+

((today.getMonth()+1)我猜您的代码会在返回后继续执行时抛出错误。我不知道您是否已经声明了此部分
string=”http://example.com/cgi-bin/perly.pl?b=1&d="+dateTime;
您似乎只是使用了这个
字符串,但没有声明它。

您的代码实际上没有将事件侦听器附加到onload事件处理程序。相反,您将
window.onload
的值设置为
loadDoc()
的返回值,这意味着
loadDoc()运行
,以计算返回值;但它会在遇到时立即运行,而不是在应调用
onload时运行

我假设添加
HttpRequest
会延迟函数足够长的时间,以便在正确的时间运行,而简单的代码是在它应该运行之前运行的

要正确附加事件,请使用

window.onload = (event) => { loadDoc(); };
请参阅以供参考

示例:在加载
myBanner
之前立即运行loadDoc,导致
uncaughttypeerror:无法将属性“innerHTML”设置为null


window.onload=loadDoc();
函数loadDoc(){
var mesage=“你好,世界”
document.getElementById(“myBanner”).innerHTML=mesage;
返回;
}

window.onload=loadDoc()
您想要的
window.onload=loadDoc
。这里您只需将loadDoc(
undefined
)的返回值设置为事件处理程序,即它不会做任何事情,也不会等待页面加载。这是在我格式化帖子时遗漏的,但它在我的代码中。谢谢。