javascript - 如何等待多个 jquery 帖子完成?

标签 javascript jquery

我正在尝试清除忙碌图标,并在多个 jquery 帖子完成后重新启用删除按钮。这是我当前的代码:

    $('#deleteimgs').live('click', function(e) {
        e.preventDefault();

        if ($('input[name="chk[]"]:checked').length > 0 ) {

            $('#deleteimgs').button('loading');
            $('#saveicon').show();

            var boxes = $('input[name="chk[]"]:checked');
            $(boxes).each(function(){

                 var id = $(this).attr('id').substr(7);
                 var self = this;

                 $.post("/functions/photo_functions.php", { f: 'del', imgid: id}, function(data){
                    if (data.success) {
                        $(self).hide();
                        $("#img_"+id).hide(250);
                    }
                }, "json");
            });

            $('#saveicon').hide();
            $('#deleteimgs').button('reset');
        }

    });

我的隐藏调用和重置调用在 foreach 循环完成之前被触发。有没有办法在进行这两个调用之前等待完成?

$('#saveicon').hide();
$('#deleteimgs').button('reset');

最佳答案

HTTP 请求完成后,您应该使用 success 回调方法来完成任何任务。在回调内部,您应该跟踪已完成的请求数量,以及最后一个请求完成时,然后执行您想要的代码。

您可以通过几种方式重构此代码,但是,它应该让您大致了解如何处理这种情况。

var boxes = $('input[name="chk[]"]:checked');
var totalBoxes = boxes.length;
var completedRequests = 0;

$(boxes).each(function(){

     var id = $(this).attr('id').substr(7);
     var self = this;

     $.post("/functions/photo_functions.php", { f: 'del', imgid: id}, function(data){
        if (data.success) {
            $(self).hide();
            $("#img_"+id).hide(250);

            //Increment the complete request count.
            completedRequests++;

            //Check if the last request has finished.  If it has, do your stuff!
            if (completedRequests == totalBoxes) {
                $('#saveicon').hide();
                $('#deleteimgs').button('reset');
            }
        }
    }, "json");
});

关于javascript - 如何等待多个 jquery 帖子完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586184/

相关文章:

javascript - jquery 验证消息未显示

javascript - 获取加载失败 : POST "http://localhost:3000/weather"

javascript - 如何避免在使用 Angular2 保存之前将弹出窗口中输入的数据反射到表中

jquery - 可点击的链接来更改 javascript

javascript - jQuery 文本框总和

jquery - 如何从joomla模块中的ajax获取数据库值?

javascript - 使用 .delegate 使用 mouseenter 或 mouseover 为图像 sibling 设置动画?

javascript - JS/JQUERY : How to match and replace occurances inside specified strings?

javascript - 加载 DOM 后无法读取动态创建的复选框的属性

javascript - jQuery UI 日期选择器显示不正确(透明)