如何在jquery中使用承诺?
我通过多个ajax调用引入了多个div。在第一个ajax调用之前,我想显示一个加载微调器。一旦所有的div(这将需要一个未知的时间)加载完毕,我想对它们进行排序。最后,我想删除加载微调器层 我认为我需要为此使用承诺(因为有多个ajax调用),但是我不知道如何实现承诺——有人能告诉我如何编写承诺吗?如果我需要向函数添加与此相关的代码,请添加什么 多谢各位 这是我的密码:如何在jquery中使用承诺?,jquery,jquery-deferred,Jquery,Jquery Deferred,我通过多个ajax调用引入了多个div。在第一个ajax调用之前,我想显示一个加载微调器。一旦所有的div(这将需要一个未知的时间)加载完毕,我想对它们进行排序。最后,我想删除加载微调器层 我认为我需要为此使用承诺(因为有多个ajax调用),但是我不知道如何实现承诺——有人能告诉我如何编写承诺吗?如果我需要向函数添加与此相关的代码,请添加什么 多谢各位 这是我的密码: $(document.body).on('click', "#refresh_view", function(){ s
$(document.body).on('click', "#refresh_view", function(){
start_spinner();
load_all_divs(list_of_ids_to_loop_over);
// once the above is complete
re_order_divs();
// once the above is complete
end_spinner();
});
load_all_divs(list_of_ids_to_loop_over) {
$.each(list_of_application_ids.split(','), function(index){
do_ajax_call_for_this_one_item(this)
});
};
如果使用jQuery的
$.ajax
(或$.get
等)加载div,则可以使用jQuery,因为它们已经返回jQueryjqXHR
对象,如下所示:
$.when(
$.ajax(/*...*/),
$.ajax(/*...*/),
$.ajax(/*...*/)
)
.done(() => {
// All done
})
.fail(error => {
// Something went wrong
});
如果您使用的是适度更新的jQuery版本,那么也可以使用该标准,因为现代版本的jQuery中的jqXHR
对象是可以使用的<代码>承诺。所有接受一个数组:
Promise.all([
$.ajax(/*...*/),
$.ajax(/*...*/),
$.ajax(/*...*/)
])
.then(() => {
// All done
})
catch(error => {
// Something went wrong
});
非常感谢。ajax调用位于load_all_divs()中的.each循环中,
load_all_divs(从\u id_到\u loop_over的列表){$。each(从\u应用程序\u id.split(',')、函数(索引){do_ajax_调用\u for_this_one_item(this)}那么我该如何履行我的承诺呢?感谢您的帮助,我想我已经了解了承诺的概念,但我不知道我在哪里/如何创建承诺,在事情完成时更新承诺,并让下一个需要运行的事情等待承诺完成。一旦我了解了这一点,我想我需要了解如何将它们链接起来@happysailingdude-将调用的结果保存在数组中,并在数组上使用Promise.all
:Promise.all(列出应用程序ID.split(',').map(do_ajax_call_for_this_one_item))。然后(function(){/*…all done…*/}.catch(function(error){/*…handle/report error…*/})代码>谢谢TJ-不幸的是,我不知道如何将ajax调用的结果保存到数组中。我希望我可以保持load_all_divs()的原样,因为上面的代码要复杂得多(但可能会添加一个promise对象?),并重写触发的代码,然后单击事件发生以使用promises。。很抱歉,我的javascript相当初级