为什么我的回调返回一个未定义的值?

时间:2019-06-18 08:33:13

标签: javascript callback xmlhttprequest return undefined

我正在尝试从回调中获取一个值,但它返回的是未定义的值。 下面是我正在使用的代码:

function getJSON(url, callback) {
   var xhttp = new XMLHttpRequest();
   xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
         if (callback) return callback(this.responseText);
      }
   };
   xhttp.open("GET", url, true);
   xhttp.send();
}

function getUserName() {
   getJSON("this is my url", function(resultJSON) {
      return JSON.parse(resultJSON).user[0].displayName;
   });
}

var userN = getUserName();
document.getElementById("username").innerHTML = "Hi " + userN;

我知道这个问题已经被询问了十亿次,但我无法按照之前的答案来解决。 html元素仍给出“ Hi undefined”。 有什么想法或建议吗?

1 个答案:

答案 0 :(得分:0)

function getJSON(url, callback) {
   var xhttp = new XMLHttpRequest();
   xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
         if (callback) return callback(this.responseText);
      }
   };
   xhttp.open("GET", url, true);
   xhttp.send();
}

function getUserName() {
   getJSON("https://my-json-server.typicode.com/typicode/demo/profile", function(resultJSON) {
      const userN = JSON.parse(resultJSON).name;
      document.getElementById("username").innerHTML = "Hi " + userN;
   });
}

getUserName();
<div id="username">Greetings</div>

您应该在Hi + <userN>的第二个参数(callback函数)内编写getJSON的代码。