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()); |
但是我得到了
我想在这些情况下使用的示例。
同步功能按以下方式工作。您告诉妻子您要外出逛街,然后去逛街,递给她一张空白的纸,并告诉她写下她想让您购买的东西。您要等到她写下来,然后再去商店。
异步功能是这样工作的。您告诉妻子您要外出逛街,然后去逛街,递给她一张空白的纸,告诉她写下她想让您购买的东西,等她完成后,给您纸并告诉你去商店;您将在等待她的指示。然后您就忘了它,开始阅读晚报。
使用异步函数而不了解您的工作,就像您在原始帖子中所做的那样,您做了类似的事情。您告诉妻子您要外出逛街,然后去逛街,递给她一张空白纸,告诉她写下她想让您购买的东西,等她完成后,给您纸并告诉你去商店。然后,您立即去商店,当找不到妻子的纸时,您会感到困惑。您回家,继续阅读晚报。然后,您的妻子将您的清单给您,并试图告诉您去商店,但是您以为工作已完成而忽略了她。
因为仅在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请求,该请求基本上是异步请求。此时返回将为
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()); |
您可以尝试在回调方法中添加
否则,如果您真的想使用ajax并等待返回,则可以尝试使ajax调用同步而不是异步
$。ajax
的简单示例
1 2 3 4 5 6 7 8 | $.ajax({ type: 'POST', url: url, data: data, success: success, dataType: dataType, async:false }); |