Javascript XMLHttpRequest:空响应

Javascript XMLHttpRequest:空响应,javascript,Javascript,当我打电话时 var zzz = new XMLHttpRequest(); zzz.open('GET', "http://freegeoip.net/json/", true); zzz.send(); console.log(zzz); console.log(zzz.response); 在控制台日志中,我可以看到response和responseText。但是当我打电话的时候 var zzz = new XMLHttpRequest(); zzz.open('GET', "http

当我打电话时

var zzz = new XMLHttpRequest();
zzz.open('GET', "http://freegeoip.net/json/", true);
zzz.send();
console.log(zzz);
console.log(zzz.response);
在控制台日志中,我可以看到response和responseText。但是当我打电话的时候

var zzz = new XMLHttpRequest();
zzz.open('GET', "http://freegeoip.net/json/", true);
zzz.send();
console.log(zzz);
console.log(zzz.response);
我看到这样的反应。我错过了什么?如何获取json?

zzz中的真值。打开“获取”,http://freegeoip.net/json/符合事实的表示请求是异步的。这意味着您需要等待请求完成

var zzz = new XMLHttpRequest();
zzz.open('GET', "http://freegeoip.net/json/", true);
zzz.onload = function(){
    console.log(zzz.response);
    if (zzz.status === 200){
        // Probably good to make the you got a success code.
    }
};
zzz.onerror = function(err){
    // Handle the error
};
zzz.send();
当第三个参数设置为true时,XMLHttpRequest对象异步完成其请求。这意味着浏览器在继续之前不会等待回答。调用send函数后,请求尚未完成,您将无法访问结果

JavaScript处理这些问题的方式是告诉对象如何处理函数。从中提取代码,您需要的是以下内容:

function reqListener () {
  console.log(this.responseText);
}

var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.open("get", "yourFile.txt", true);
oReq.send();

您看不到结果,因为在默认情况下,不仅请求是异步的,而且您还手动将其设置为异步的。将async标志第三个参数设置为.open改为false,您将获得预期的行为


然而,正如@itdoesnetwork在下面指出的,使用同步请求是一种非常糟糕的做法。最好使用异步请求并正确处理其结果,如其他答案所示。

我认为服务器过载,浏览器等待响应的时间很长。是的,但这会锁定浏览器,通常不建议这样做是的,当然。这只是把海报带到他想去的地方的最小变化。他是否会走向深渊完全是另一回事: