2014-11-22 83 views
0

当我打电话的XMLHttpRequest:空响应

var zzz = new XMLHttpRequest(); 
zzz.open('GET', "http://freegeoip.net/json/", true); 
zzz.send(); 
console.log(zzz); 

在控制台日志中我可以看到responseresponseText。但是,当我打电话

console.log(zzz.response); 

我看到类似的反应""。我错过了什么?我如何获得json?

+0

我认为服务器超载,浏览器等待响应很长时间。 – Cheery 2014-11-22 22:55:47

回答

0

true in zzz.open('GET', "http://freegeoip.net/json/", true);表示请求是异步的。这意味着您需要等待请求完成。当第三个参数被设置为true

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(); 
0

XMLHttpRequest对象异步完成其请求。这意味着浏览器在继续之前不会等待答案。在您调用send()函数后,请求尚未完成,您将无法访问结果。

JavaScript处理这些的方式是告诉对象如何处理某个函数。从here翻录的代码,你要的是这样的:

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

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

你没有看到的结果,因为这不仅是在默认情况下请求的异步 - 你手动设置它是异步的。将async标志(第三个参数为.open())设置为false,而您会得到您所期望的行为。


但是,正如@itdoesntwork指出的那样,使用同步请求是非常糟糕的做法。正如其他答案中所示,最好使用异步请求并正确处理其结果。

+2

确实如此,但这会锁定浏览器,一般不建议使用 – itdoesntwork 2014-11-22 22:58:58

+0

是的,当然。这只是把海报带到他想去的地方的最小变化。无论他是否进入深渊,完全是另一回事:) – hon2a 2014-11-22 23:01:15