javascript - 从 javascript 函数返回 json 数据

标签 javascript json

以下函数从文件中读取 JSON 数据。

function getJsonData(){

  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function (){
   if(xhttp.readyState == 4 && xhttp.status == 200){
    var javaobj = JSON.parse(xhttp.response);
    return javaobj;
   }
  }

  xhttp.open("GET", "json_output.json", true)
  xhttp.send();
}

何时 getJsonData下面调用,返回 undefined

function CreateTableFromJSON() { 
  var myBooks = getJsonData();
  alert(myBooks)//returns undefined
}

最佳答案

function getJsonData(cb) {

  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function () {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
      var javaobj = JSON.parse(xhttp.response);
      cb(javaobj);
    }
  }
  xhttp.open("GET", "json_output.json", true)
  xhttp.send();

}

function CreateTableFromJSON() {

  getJsonData(function(myBooks){
    alert(myBooks)
  });

}

您可以使用 JavaScript 回调

<小时/>
function getJsonData() {
  return new Promise(resolve => {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
      if (xhttp.readyState == 4 && xhttp.status == 200) {
        var javaobj = JSON.parse(xhttp.response);
        resolve(javaobj);
      }
    }
    xhttp.open("GET", "json_output.json", true)
    xhttp.send();
  })


}

async function CreateTableFromJSON() {

  var myBooks = await getJsonData();
  alert(myBooks)

}

或者你可以使用 Promise/async/await

<小时/>
function getJsonData() {
  return new Promise(resolve => {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
      if (xhttp.readyState == 4 && xhttp.status == 200) {
        var javaobj = JSON.parse(xhttp.response);
        resolve(javaobj);
      }
    }
    xhttp.open("GET", "json_output.json", true)
    xhttp.send();
  })
}

function CreateTableFromJSON() {
  getJsonData().then(myBooks => alert(myBooks))
}

或者,我们可以使用 then 来表示 Promise

关于javascript - 从 javascript 函数返回 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112229/

相关文章:

json - 如何使用外部 Json 文件作为 webapi 的数据源

java - 自动完成 TextView + Json 服务器动态获取标签

javascript - JavaScript 语法中的歧义

线程 "main"java.lang.NumberFormatException : For input string: "" 中的 JavaScript 到 Java 异常

javascript - -= 和网络 worker 的错误

javascript - setTimeout 在加载时调用的函数中是即时的

javascript - SQL 右连接到 JSON/数组

javascript - Pro JavaScript 程序员面试题(附答案)

javascript - Angular Material md-subheader 不粘

json - 使用 bash 发送 json HTTP post