Javascript 异步获取日期头
正如标题所述,我希望获得响应头日期值,但我一直得到以下警告: 主线程上的同步XMLHttpRequest已被弃用,因为 它会对最终用户的体验产生不利影响。要获得更多帮助, 检查 我的代码:Javascript 异步获取日期头,javascript,Javascript,正如标题所述,我希望获得响应头日期值,但我一直得到以下警告: 主线程上的同步XMLHttpRequest已被弃用,因为 它会对最终用户的体验产生不利影响。要获得更多帮助, 检查 我的代码: function getxmlhttp () { // although IE supports the XMLHttpRequest object, but it does not work on local files. var forceActiveX = (window.ActiveX
function getxmlhttp () {
// although IE supports the XMLHttpRequest object, but it does not work on local files.
var forceActiveX = (window.ActiveXObject && location.protocol === "file:");
if (window.XMLHttpRequest && !forceActiveX) {
return new XMLHttpRequest();
}else {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
}
alert ("Your browser doesn't support XML handling!");
return null;
};
function srvTime(){
xmlHttp = getxmlhttp();
//xmlHttp.open('HEAD',window.location.href.toString(),false);
//need to send this to a non-volitile page
xmlHttp.open('GET',"blank.php",false);
xmlHttp.setRequestHeader("Content-Type", "text/html");
xmlHttp.send(null);
console.log("raw " + xmlHttp.getResponseHeader("Date"));
return xmlHttp.getResponseHeader("Date");
};
当我切换这条线路时:
xmlHttp.open('GET',"blank.php",true);
为真,该值返回NULL
那么这是可以做到的,还是我必须接受控制台中的警告
谢谢正如标题所述,您必须异步发出请求。这意味着您必须发出请求并等待其完成以获取信息。像这样的方法应该会奏效:
function srvTime(callback) {
xmlHttp = getxmlhttp();
//xmlHttp.open('HEAD',window.location.href.toString(),false);
//need to send this to a non-volitile page
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) { // The operation is complete
console.log("raw " + xmlHttp.getResponseHeader("Date"));
callback(xmlHttp.getResponseHeader("Date"));
xmlHttp = null;
}
};
xmlHttp.open('GET', "blank.php", true);
xmlHttp.setRequestHeader("Content-Type", "text/html");
xmlHttp.send(null);
};
请注意,您必须更改srvTime
方法的签名。您不能从中返回数据,调用方必须提供一个回调函数,该函数在请求完成后接收日期
您将如何在新签名中使用此函数的示例如下:
srvTime(function (serverDate) {
document.getElementById("clock").innerHTML = "Game Time: " + serverDate;
});
jquery是一个选项吗?如果是,请查看此答案。是否将脚本标记中包含的blank.php中的任何脚本返回给客户端?您需要在异步请求中使用onreadystatechange/load处理程序,只有这样数据/头才可用。请参阅@noc2spamツ 我不打算使用jQuery,yet@dreamweiverblank.php是一个空白文件。这样我就可以从请求中获取标题信息。他只想要一个标题,所以HEAD可能是一个更好的动词。@AlexK。是的,没错。为了澄清这一点,我的意图是修改他的现有代码,使其能够正常工作。不过,既然您提到了它,您应该能够在
readyState==2
(接收到的头文件)处获取头文件,因此这将是另一个优化。@jaka。好吧,有一件事我不明白,那就是“回调”。你能给我解释一下,或者给我指个地方,说明如何从那里获取信息吗?谢谢你迄今为止的帮助!我的其余代码:var updatelock=function(){function pad(n){return(n<10)'0'+n:n;}var st=srvTime();var now=new Date(st);var s=pad(now.getHours())+:'+pad(now.getMinutes())+':'+pad(now.getMinutes())document.getElementById(“clock”).innerHTML=“游戏时间:”+s;var delay=1000;setTimeout(updatelock,delay);console.log(“时间更新:”+st);now=”“;”代码>回调是对异步进程完成时将调用的函数的引用。这是使用JavaScript的一个非常基本的概念,因此如果您不熟悉它,您需要做一些研究。我将在答案中添加一个示例。