这段代码中的问题在哪里?

时间:2016-02-03 22:54:15

标签: javascript xmlhttprequest

我在函数中有一个XMLHttpRequest,结果正常。但是我无法返回这个值。

plugin.js

var users = getUsers(url);

pluginfunctions.js

function getUsers(u) {

var obRespuesta = [];

  var client = new XMLHttpRequest();
  client.onreadystatechange = function() {
    if (client.readyState == XMLHttpRequest.DONE) {

      obRespuesta = JSON.parse(client.responseText);
      console.log(obRespuesta);
          }
  };

  client.open("GET", "http://localhost/extencio/index.php?url=" + u, true);
  client.send();

console.log(obRespuesta);
return obRespuesta;

}

好的,obRespuesta是一个空数组。 第一个console.log的值是:array [2]。它运作良好。

但是最后一个console.log和return的值是一个空数组。阵列[0]

我认为这是因为返回是在客户端更改状态之前执行的。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您需要让您的函数接受回调并调用该回调。

function getUsers(u, callback) {
    var obRespuesta = [];

    var client = new XMLHttpRequest();
    client.onreadystatechange = function() {
        if (client.readyState == XMLHttpRequest.DONE) {
            obRespuesta = JSON.parse(client.responseText);
            callback(obRespuesta);
        }
    };

    client.open("GET", "http://localhost/extencio/index.php?url=" + u, true);
    client.send();
}

现在您可以通过以下方式获取用户:

getUsers(url, function(users) {
    //do your parsing with users
});