当我尝试访问其任何属性时,AJAX响应为空

时间:2017-09-12 14:51:40

标签: javascript json ajax

我正在尝试通过AJAX为Greasemonkey脚本提取一些JSON数据。

这就是我所拥有的:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var xmlresult = JSON.parse(this.response);
    // this works
    console.log(xmlresult);
  }
};
xmlhttp.open("GET", "https://raw.githubusercontent.com/mledoze/countries/master/countries.json", true);
xmlhttp.send();

// this doesn't work
console.log(xmlresult);

出于某种原因,xmlresult始终为空。如果我直接在控制台中转储响应,响应中显然有数据,但如果我尝试在if块之外做任何事情,它就不存在。

1 个答案:

答案 0 :(得分:-1)

这是因为xmlresultonreadystatechange侦听器功能中的局部变量,并且它的值不会被保留供外部使用。你应该这样做:

var xmlresult;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    xmlresult = JSON.parse(this.response);
  }
};
xmlhttp.open("GET", "https://raw.githubusercontent.com/mledoze/countries/master/countries.json", true);
xmlhttp.send();