JavaScript - 无法从onload函数中获取数据(http请求)

时间:2017-01-18 20:22:26

标签: javascript api http request onload

所以我目前正在开发一个使用api的程序。

我有两个函数atm:

getBotID()

function getBotID(domain) {
  var url = "http://" + domain + ":8087/api/v1/botId";
  idRequest.open("GET", url);
  idRequest.onload = function() {
      var botID = JSON.parse(idRequest.responseText);
  };
  idRequest.send();
}

和getAuth()

function getAuth(domain, user, pass) {
  getBotID(domain);

  var url = "http://" + domain + ":8087/api/v1/bot/login";
  body = '{"username": ' + user + ', "password": ' + pass + ', "botId": ' + botID + '}';
  authRequest.open("POST", url);
  authRequest.setRequestHeader("Content-Type", "application/json");
  authRequest.onload = function() {
      var authToken = JSON.parse(authRequest.responseText);
  };
  authRequest.send(JSON.stringify(body));
}

我必须先获取botID才能尝试获取新的AuthToken,以便我立即在getAuth()函数中调用getBotID()。

我的问题是:我无法在getBotID()中的http请求的onload()函数之外获取botID,因为它将像这样运行:

  1. 启动getAuth()
  2. 启动getBotID()
  3. 完成getBotID()
  4. 完成getAuth()
  5. AND NOW完成getBotID()...
  6. 的onload函数

    我只是无法从onload函数中获取botID数据。我已经尝试过一个回调函数但是没有用。

2 个答案:

答案 0 :(得分:1)

我认为这会奏效。将匿名函数传递给getBotId并在第一次请求完成后将其调用回来:

function getBotID(domain, callback) {
  var url = "http://" + domain + ":8087/api/v1/botId";
  idRequest.open("GET", url);
  idRequest.onload = callback;
  idRequest.send();
}

function getAuth(domain, user, pass) {
  getBotID(domain, function() {
    var botID = JSON.parse(this.responseText);
    var url = "http://" + domain + ":8087/api/v1/bot/login";
    body = '{"username": ' + user + ', "password": ' + pass + ', "botId": ' + botID + '}';
    authRequest.open("POST", url);
    authRequest.setRequestHeader("Content-Type", "application/json");
    authRequest.onload = function() {
      var authToken = JSON.parse(authRequest.responseText);
    };
    authRequest.send(JSON.stringify(body));
  });
}

答案 1 :(得分:0)

所以最简单的方法是添加一个" false" getBotIDs idRequest.open()函数的参数。这将导致代码同步,onload()函数将在其余代码运行之前完成。