Javascript 异步获取日期头

Javascript 异步获取日期头,javascript,Javascript,正如标题所述,我希望获得响应头日期值,但我一直得到以下警告: 主线程上的同步XMLHttpRequest已被弃用,因为 它会对最终用户的体验产生不利影响。要获得更多帮助, 检查 我的代码: function getxmlhttp () { // although IE supports the XMLHttpRequest object, but it does not work on local files. var forceActiveX = (window.ActiveX

正如标题所述,我希望获得响应头日期值,但我一直得到以下警告:

主线程上的同步XMLHttpRequest已被弃用,因为 它会对最终用户的体验产生不利影响。要获得更多帮助, 检查

我的代码:

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的一个非常基本的概念,因此如果您不熟悉它,您需要做一些研究。我将在答案中添加一个示例。