Javascript 为什么window.onload只在某些时候被调用刷新?
很明显,我的JavaScript代码是有效的。我使用window.onload调用一个初始函数,该函数获取时间和日期,并通过XMLHttpRequest将其发送到远程服务器。在调试过程中,我简化了初始函数,只是为了在屏幕上显示时间和日期,而不是其他 我发现当我执行后一个刷新时,并不总是会导致调用window.onload。即使使用Crtl+F5也很少改变时间。最后,将剩下的代码放回(调用服务器),每次刷新都能正常工作 下面的代码似乎没有为每次刷新调用onload事件。但是,如果删除由注释包围的return语句,则每次刷新都会调用window.onload 虽然我不应该抱怨我的完整代码可以工作,但我想知道为什么简单版本不能工作Javascript 为什么window.onload只在某些时候被调用刷新?,javascript,Javascript,很明显,我的JavaScript代码是有效的。我使用window.onload调用一个初始函数,该函数获取时间和日期,并通过XMLHttpRequest将其发送到远程服务器。在调试过程中,我简化了初始函数,只是为了在屏幕上显示时间和日期,而不是其他 我发现当我执行后一个刷新时,并不总是会导致调用window.onload。即使使用Crtl+F5也很少改变时间。最后,将剩下的代码放回(调用服务器),每次刷新都能正常工作 下面的代码似乎没有为每次刷新调用onload事件。但是,如果删除由注释包围的r
<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
)的返回值设置为事件处理程序,即它不会做任何事情,也不会等待页面加载。这是在我格式化帖子时遗漏的,但它在我的代码中。谢谢。