【问题标题】:jquery each | increment variable not workingjQuery 每个 |增量变量不起作用
【发布时间】:2014-12-17 02:15:18
【问题描述】:

我有一个包含多个值的变量(对象)。

对于这些值中的每一个,我使用“post”和“done”方法执行 AJAX,如下所示。

能否请您帮助我理解为什么变量“counter”在循环中会很好地递增(第一个 console.log show, 1, 2, 3,4, ....)。

但是当循环结束时,第二个“console.log”在 0 处显示“counter”?我错过了什么吗?

$('.confirm_suppression').on('click',function(){
    var counter = '0';
    $.each(row_to_delete, function(data){
        $.post(
            "/mysql/function_manager.php",
            {
                'type_request' : 'remove_user_from_host',
                'user_id' : iduser,
                'host_id' : row_to_delete[data].id
            },
            "json"
        ).done(function(data) {
            var array = JSON.parse(data);
            if(array.status == 'OK'){
                ++counter;
                console.log('value counter in loop : ' + counter);
                $('#dialogboxhead').val('in progress');
            };
            if(array.status == 'KO'){
                alert(array.msg);
            };
        });
    });
    console.log('value counter : ' + counter);
});

`

谢谢。

【问题讨论】:

  • 每次循环,您都会开始一个post() 调用,该调用将在稍后的某个时间结束。然后循环退出,计数器(奇怪地)'0' 而不仅仅是0。一段时间后,post 调用完成,同时增加了counter

标签: javascript jquery ajax post each


【解决方案1】:

因为您使用$.post 执行异步任务,称为AJAX 调用。这意味着如果 AJAX 调用完成,则调用 done() 部分。虽然这个 AJAX 调用需要一些时间,但函数的其余部分会被执行。所以这部分console.log('value counter : ' + counter); 在这部分console.log('value counter in loop : ' + counter); 之前被调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2014-06-07
    • 2013-06-30
    • 2017-06-16
    相关资源
    最近更新 更多