---已编辑---由于我的无知,这实际上与所有其他 AJAX 类型的问题相同......需要进入正确的心态。为了后代的缘故将它留在这里,也许可以帮助其他人在发布之前再看一下回调。
所以我想提前说,我认为这不是标准的“我如何从 ajax 调用返回值”问题,人们不等待异步调用完成。我认为这是对 Javascript 模块模式的变量范围误解,因此我们将不胜感激。
我正在关注这篇关于构建我的 ajax 调用的 SO 帖子,所以我在调用完成后使用延迟对象来处理我的数据。还有一些关于 Javascript 模块模式的教程,比如this和this。从外部模块内部的私有模块中返回值似乎相当简单——但是,我总是将 myObj.roots() 设为未定义。即使当我检查断点时它被定义为 X 值的数组。我错过了什么简单的事情——任何提示?谢谢!对不起一个简单的问题,我对 JS 模块模式完全陌生,并试图建立自己的库......
我的 JS 代码:
var myObj = (function(window,document,$,undefined){
var _baseUri = 'http://example.com/',
_serviceUri = 'services/',
_bankId = '1234',
_myUri = _baseUri + _serviceUri + 'objectivebanks/' + _bankId,
_roots = [];
function myAjax(requestURL) {
return $.ajax({
type: 'GET',
url: requestURL,
dataType: 'json',
async: true
});
}
var getRoots = function() {
var _url = _myUri + '/objectives/roots';
_roots = [];
myAjax(_url).done(function(data) {
$.each(data, function(index, nugget) {
_roots.push(nugget);
});
return _roots;
}).fail(function(xhr, textStatus, thrownError) {
console.log(thrownError.message);
});
}
return {
roots: getRoots
};
})(this,document,jQuery);
我的错误(来自 Chrome 的开发者工具控制台):
myObj.roots()
undefined