jQuery + .each() + .post()...同步运行?

标签 jquery

我有一个 HTML 表格。该表有几行。我正在运行 jQuery 代码,该代码扫描表,并为每一行运行一个 POST 请求。下面是我正在使用的代码...

首先,我们设置表,并从中获取一些数据:

$target = this.$target;

var process = true,
    eventID = $target.data('event'),
    address = $target.data('href');

然后我使用 .each() 迭代所有行

$target.find('.row').each(function()
{
    var $fa = $(this).find('.fa');

    if (process)
    {
        var input = {
            'eventID': eventID,
            'userID': $(this).data('user'),
            'seed': $(this).data('seed'),
        };

        $.post(address, input, function(data)
        {
            $fa.addClass('fa-check-circle-o');
        });
    }
    else
    {
        $fa.addClass('fa-exclamation-triangle');
    }
});

从上面的代码中可以看到,对于每一行,我做了几件事:

  • 查找嵌套的.fa类元素
  • 检查process是否为true
  • 收集几项数据
  • 将数据发布到地址

帖子完成后,它会在 .fa 元素中添加一个 fa-check-circle-o 标记。

我遇到的问题是所有 .each() 函数同时运行,而不是一个接一个地运行。如何让它等待完成每一行,然后再继续下一行?

我还希望它在失败时向元素添加一个 fa-感叹号-三角形标记,并将 process 标记为 false 以便它跳过所有 future 的内容行...但我不知道如何捕获帖子的失败。

最佳答案

您可以简单地创建一个要迭代的元素的数组,然后在 ajax 回调中连续调用它们。您可以使用 Promise interface此处根据请求的成功、失败或完成来触发操作:

var rows;
$(".button").on('click', function() {
    rows = $('.rows').toArray();
    var row = rows.shift();
    doAjax(row);
});
function doAjax(row) {
    $.post('ajax.php')
        .done(function() {
            // this runs on success
        })
        .fail(function() {
            // this runs on ajax failure
        })
        .always(function() {
            // this always runs
            // call next element in your array now...
            if (rows.length) {
                var row = rows.shift();
                doAjax(row);
            }
        });

}

这是一个有效的示例:http://so-ajax-each.dev.zuma-design.com/

关于jQuery + .each() + .post()...同步运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52694739/

相关文章:

javascript - 如何在 MVC 中有自己的 Controller 的索引中创建工作模态弹出寄存器?

php - 脚本执行后如何保存用户在表单页面输入的数据?

php - 在Mysql中插入PHP值后如何显示最后选择的下拉值?

javascript - 如何将其转换为 html 可读代码?

javascript - 创建元素功能不起作用

php - 通过jquery和ajax发布两个变量

php - 使用 AJAX 以 "post"登录用户的用户名到 mysql 数据库

javascript - 在数组元素的文本中找到后替换字符串的一部分

javascript - Jquery.Get 调用 Controller 方法并不总是有效

jquery - JQuery 中的动态高度