我的代码如下:
function DBManager() {
this.getContactsList = function() {
$.post('/post/getContactsList', function (contacts) {
return contacts;
});
}
}
var DBManager = new DBManager();
console.log(FF_DBManager.getContactsList());
但我得到undefined
而不是看到帖子回复的结果。
答案 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
});