AJAX并返回(异步相关)

时间:2014-04-11 04:29:31

标签: javascript jquery asynchronous

我的代码如下:

function DBManager() {

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

var DBManager = new DBManager();

console.log(FF_DBManager.getContactsList());

但我得到undefined而不是看到帖子回复的结果。

3 个答案:

答案 0 :(得分:2)

我喜欢在这些情况下使用的一个例子。

同步功能就像这样工作。你告诉你的妻子你要外出,你会去购物,递给她一张白纸,并告诉她写下她想要你买的东西。你等到她把它写下来,然后去商店。

异步函数的工作方式如下。你告诉你的妻子你要外出,你会去购物,递给她一张白纸,告诉她写下她想要你买的东西,当她完成后,给你纸,告诉你你去商店;你会等待她的指示。然后你忘了它并开始阅读你的晚报。

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

答案 1 :(得分:1)

因为只有在ajax调用完成后才能使用联系人的值。所以你需要通过一个处理ajax结果的回调函数来完成它。像

function DBManager() {

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

FF_DBManager.getContactsList(function(data){

    console.log(data);

});

答案 2 :(得分:0)

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

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的简单示例

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});