关于javascript:AJAX和返回(与异步相关)

AJAX and returns (async related)

本问题已经有最佳答案,请猛点这里访问。

我的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
function DBManager() {

    this.getContactsList = function() {
        $.post('/post/getContactsList', function (contacts) {
            return contacts;
        });
    }
}

var DBManager = new DBManager();

console.log(FF_DBManager.getContactsList());

但是我得到了undefined,而不是从帖子的响应中看到结果。


我想在这些情况下使用的示例。

同步功能按以下方式工作。您告诉妻子您要外出逛街,然后去逛街,递给她一张空白的纸,并告诉她写下她想让您购买的东西。您要等到她写下来,然后再去商店。

异步功能是这样工作的。您告诉妻子您要外出逛街,然后去逛街,递给她一张空白的纸,告诉她写下她想让您购买的东西,等她完成后,给您纸并告诉你去商店;您将在等待她的指示。然后您就忘了它,开始阅读晚报。

使用异步函数而不了解您的工作,就像您在原始帖子中所做的那样,您做了类似的事情。您告诉妻子您要外出逛街,然后去逛街,递给她一张空白纸,告诉她写下她想让您购买的东西,等她完成后,给您纸并告诉你去商店。然后,您立即去商店,当找不到妻子的纸时,您会感到困惑。您回家,继续阅读晚报。然后,您的妻子将您的清单给您,并试图告诉您去商店,但是您以为工作已完成而忽略了她。


因为仅在ajax调用完成之后才可以使用contacts的值。因此,您需要通过处理ajax结果的回调函数来执行此操作。像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function DBManager() {

    this.getContactsList = function(cb) {
        $.post('/post/getContactsList', function (contacts) {
            cb(contacts);
        });
    }
}

FF_DBManager.getContactsList(function(data){

    console.log(data);

});


调用函数时,函数依次发出ajax请求,该请求基本上是异步请求。此时返回将为undefined,但是一旦ajax调用完成,它将返回正确的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
function DBManager() {

    this.getContactsList = function() {
        $.post('/post/getContactsList', function (contacts) {
            console.log(contacts);
            return contacts;
        });
    }
}

var FF_DBManager = new DBManager();

console.log(FF_DBManager.getContactsList());

您可以尝试在回调方法中添加console.log(contacts);,以查看基本返回的内容。

否则,如果您真的想使用ajax并等待返回,则可以尝试使ajax调用同步而不是异步

$。ajax

的简单示例

1
2
3
4
5
6
7
8
$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});