Javascript Jquery从each循环延迟请求ajax
三天来,我一直在试图找到一种在代码中使用JQuery延迟方法的方法,但不幸的是,我从未找到解决方案 我有两个函数。 第一个Javascript Jquery从each循环延迟请求ajax,javascript,jquery,ajax,jquery-deferred,deferred,Javascript,Jquery,Ajax,Jquery Deferred,Deferred,三天来,我一直在试图找到一种在代码中使用JQuery延迟方法的方法,但不幸的是,我从未找到解决方案 我有两个函数。 第一个init_items发送第一个ajax请求以获取项目列表,然后,循环使用这些项目名称发送其他请求以获取项目的更多详细信息。 因此,在这个函数中,我希望当第一个请求完成时,启动以下请求 在调用click的第二个函数中,我希望系统在获取数据之前等待第一个功能完全完成(所有请求都完成) function init_items(id) { $.when(
init_items
发送第一个ajax请求以获取项目列表,然后,循环使用这些项目名称发送其他请求以获取项目的更多详细信息。
因此,在这个函数中,我希望当第一个请求完成时,启动以下请求
在调用click的第二个函数中,我希望系统在获取数据之前等待第一个功能完全完成(所有请求都完成)
function init_items(id) {
$.when(
$.ajax({
async: false,
data: { type : type, name : domain },
type: 'GET',
url: 'select_items.php'
}).done( function (data) {
var promises=[];
$.each( JSON.parse(data), function(k,v) {
var code = v.code;
getCurrentItem(code);
var req = $.get("get_groups.php", { id: id }).done(function(data1) {
res = JSON.parse(data1);
global_news[domain] = res;
promises.push( req );
});
return $.when.apply(null, promises).done(function(){
console.log('done 1');
});
});
}
$("button[name='refresh_value']").on("click", function() {
var id = $("select[name='id']").val();
$.when(init_items(id)).done(function(n){
console.log(n.num);
console.log('all set');
});
});
当前点击按钮,函数init_items
启动,但它不会等待结果显示信息
我读过很多关于延迟、承诺、时间的案例,但我没有解决这个问题
有人有主意吗?我非常感谢你的帮助
最好的
山姆谢谢大家。
我已经找到了解决办法。我将函数分为两个函数。
当第一个完成请求后,它会调用第二个,第二个启动承诺中声明的请求。谢谢大家。
我已经找到了解决办法。我将函数分为两个函数。
当第一个完成请求后,它调用第二个,第二个启动承诺中声明的请求。a)您必须使用
然后而不是完成进行链接。尽可能避免done
。b) 大括号与缩进不匹配。看起来您试图做正确的事情,但是您编写的代码没有做到这一点。内部done
的回调如何/在何处结束是毫无意义的。domain
似乎是一个常量,getCurrentItem(code)
在nomansland中有点浮动。a)你必须使用然后而不是done
进行链接。尽可能避免done
。b) 大括号与缩进不匹配。看起来您试图做正确的事情,但是您编写的代码没有做到这一点。内部done
的回调如何/在何处结束毫无意义。domain
似乎是一个常量,getCurrentItem(code)
在nomansland中有点浮动。