[英]Getting correct data when using multiple deferred ajax calls
我有一个使用两个ajax调用的函数,以获取正确的信息:
var getUsers = function() {
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js", function(foo) {
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js", function(bar) {
return foo['age'] = bar.type;
});
});
}
还有一个调用当前函数的外部函数,只有在调用完成后才会继续。
getUsers().then(function(result) {
// ...
});
现在奇怪的是,如果我显示结果,'age'将显示在控制台中,但如果我尝试使用result['age']
访问它,它将返回undefined。
有没有一种处理多个延期呼叫的正确方法?
编辑而不是使用单独的延迟,您可以链接从getJSON()
返回的那些
var getUsers = function() {
var foo;
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
.then(function(data) {
foo = data;
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
}).then(function(bar) {
foo['age'] = bar.type;
return foo;
});
}
注意:您需要保存第一次调用的返回值,否则第二次调用将无法访问它。
后代的原始代码
您可以使用jQuery Deferred对象并返回该对象
var getUsers = function() {
var dfd = $.Deferred();
$.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
.done(function(foo) {
$.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
.done(function(bar) {
foo['age'] = bar.type;
dfd.resolve(foo);
}).fail(function(e) {
dfd.reject(e);
})
}).fail(function(e) {
dfd.reject(e);
});
return dfd.promise();
}
http://codepen.io/anon/pen/pvwqZo
在两个请求都成功之前,延迟对象将无法解析(如果任何请求失败,则将失败)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.