我有三个HTTP调用需要以同步方式进行,如何将数据从一个调用传递到另一个调用?
function first()
{
ajax()
}
function second()
{
ajax()
}
function third()
{
ajax()
}
function main()
{
first().then(second).then(third)
}
我尝试对这两个函数使用延迟,并提出了部分解决方案。我可以将它扩展为三个函数吗?
function first() {
var deferred = $.Deferred();
$.ajax({
"success": function (resp)
{
deferred.resolve(resp);
},
});
return deferred.promise();
}
function second(foo) {
$.ajax({
"success": function (resp)
{
},
"error": function (resp)
{
}
});
}
first().then(function(foo){second(foo)})
发布于 2014-01-28 07:21:01
在jQuery中使用promises时,实际上有一种简单得多的方法。请看以下内容:
$.when(
$.ajax("/first/call"),
$.ajax("/second/call"),
$.ajax("/third/call")
)
.done(function(first_call, second_call, third_call){
//do something
})
.fail(function(){
//handle errors
});
只需将所有调用链接到$.when(...)调用并处理.done(...)中的返回值打电话。
如果您愿意,这里有一个演练:http://collaboradev.com/2014/01/27/understanding-javascript-promises-in-jquery/
发布于 2017-04-03 04:56:58
回复太晚了,但我猜答案中缺少一些链接的直接代码。使用jquery中的promise支持,链接事件非常简单。我使用以下链接:
$.ajax()
.then(function(){
return $.ajax() //second ajax call
})
.then(function(){
return $.ajax() //third ajax call
})
.done(function(resp){
//handle final response here
})
它很简单,没有复杂的for循环或多个嵌套回调。
发布于 2013-04-16 08:47:16
这比这简单得多。
$.ajax
已经返回了一个promise (延迟对象),所以您可以简单地编写
function first() {
return $.ajax(...);
}
https://stackoverflow.com/questions/16026942
复制相似问题