一尘不染

jQuery ajax循环和迭代范围

ajax

我想知道为什么在 i 变量下面的代码中 仍然显示“ 5” 而不是显示 “ 1” 然后 “ 2” 然后 “ 3”
,依此类推?必须是一个范围问题,但由于在全局和dom范围中更改了i变量的范围,但仍然遇到相同的问题,因此我并没有真正了解它。当我提醒
的AJAX功能外,它工作得很好。

for (var i = 0; i < 5; i++) {   
   $.ajax({
        url: '/echo/html/',
        method:'post',
        data: {
            html: 'Ajax data'
        },
        success: function (resp) {
            $('#success').append(i) // always 5
        }
    })
    $('#outsideAjax').append(i); // is okay
}

这是小提琴

编辑:

我选择了 @Tushar Gupta 解决方案,因为它最适合我的需要,但是又遇到了另一个问题,如果设置此选项,则迭代将无法进行:
processData:false

看到小提琴

为什么这不起作用?


阅读 247

收藏
2020-07-26

共1个答案

一尘不染

[**fiddle Demo**](http://jsfiddle.net/cse_tushar/6RfRp/)

var i = 0;

function ajax_call() {
    $.ajax({
        url: '/echo/html/',
        method: 'post',
        data: {
            html: 'Ajax data'
        },
        success: function (resp) {
            $('#success').append(i++);
            if (i < 5) {
                ajax_call();
            }
        }
    });
    $('#outsideAjax').append(i);
};
ajax_call();
2020-07-26