等待AJAX完成后再继续循环

时间:2018-12-30 作者:sharulhafiz

我正在开发一个代码,搜索大约5000个孤立用户,并将其删除。使用Ajax,如何等待响应完成,然后继续循环?目前,循环将继续执行,我在后台有一个挂起的ajax调用,我认为这将使服务器同时处理它。

下面是示例代码。

<script>
        var users_info = <?php echo json_encode($usersarray); ?>;
        console.log(users_info);
        $=jQuery;
        var each = \'\';
        j = 0;
        for ( i=0; i < users_info.length; i++) {
            each = users_info[i];
            var data = {
                \'action\': \'delete_orphan_users\',
                \'user_id\': each
            };
            $.post(ajaxurl, data, function(response) {
                $("#status").prepend(response);
                j++;
                $("#deletedusers").html(j);
            });
            if (j==users_info.length){
                alert(\'Finished\');
            }
        }

    </script>

1 个回复
SO网友:sharulhafiz

我根据Jory Hogeven的评论修改了代码,解决了我的问题。我要做的是,不使用常规循环,而是使用一个递归函数,该函数在完成请求调用后调用自己。对于那些正在寻找相同答案的人,请参见下文。

var users_info = <?php echo json_encode($usersarray); ?>;
console.log(users_info);
$=jQuery;
var each = \'\';
    j = 0;
    function nextAjax(i) {
        var data = {
            \'action\': \'delete_orphan_users\',
            \'user_id\': users_info[i]
        };
        $.post(ajaxurl, data, function(response) {
            n = new Date($.now());
            m = n.getHours()+\':\'+n.getMinutes();
            $("#status").prepend(m+\' \'+response);
            j++;
            $("#deletedusers").html(j);
            if( j==users_info.lenght ){
                location.reload(); //current batch finished, reload screen to get another batch of users
            } else {
                nextAjax(j);
            }
        });
    }
    console.log(\'Start\')
    nextAjax(j);

相关推荐

如何在AJAX调用中使用`Foreach()`

我编写了一段代码,用于使用ajax for WordPress从数据库中检索数据。以下代码是在functions.php. 代码用于获取类别id下的id和子类别名称,类别id定义为$cat . 结果,我需要显示为下拉列表function fetchData(){ global $wpdb; $catId = $_POST[\'key\']; // value from the ajax // Now we want to JSON encode