Javascript 带有for循环的AJAX Done()函数

Javascript 带有for循环的AJAX Done()函数,javascript,jquery,ajax,for-loop,Javascript,Jquery,Ajax,For Loop,我有一个for循环,它遍历3个值(不同的报告编号)的数组,并为每个值发送一个AJAX请求。我希望.done()函数对于返回的每个报告都有不同的行为。但是,我不确定如何使报告编号可用于done函数。如果我没有将报告编号作为参数传递给done()函数,那么它总是认为报告编号是“190”,即数组中的最后一个值。如果我传递它,如下所示,它显示为未定义 function runQueries(request, data) { var reports = ['103', '187', '190'];

我有一个for循环,它遍历3个值(不同的报告编号)的数组,并为每个值发送一个AJAX请求。我希望.done()函数对于返回的每个报告都有不同的行为。但是,我不确定如何使报告编号可用于done函数。如果我没有将报告编号作为参数传递给done()函数,那么它总是认为报告编号是“190”,即数组中的最后一个值。如果我传递它,如下所示,它显示为未定义

function runQueries(request, data) {
    var reports = ['103', '187', '190'];
    for (i=0; i < reports.length; i++) {
        var report = reports[i];
        $.ajax({
        url: request + '&reportType=' + report},
        data: data
        })
        .done(function(response, textStatus, jqXHR, report) {
            if (report === '187') {
            ...
            }
            else if (report === '190'( {
            ...
            }
函数运行查询(请求、数据){
var报告=['103'、'187'、'190'];
对于(i=0;i
关闭和范围:

function runQueries(request, data) {
    var reports = ['103', '187', '190'];
    for (i=0; i < reports.length; i++) {
        (function(report) {
            $.ajax({
                url: request + '&reportType=' + report},
                data: data
            }).done(function(response) {
                if (report === '187') {
                      ...
                } else if (report === '190'( {
                      ...
                }
            });
         })(reports[i]);
    }
}
函数运行查询(请求、数据){
var报告=['103'、'187'、'190'];
对于(i=0;i
done()
方法是异步的,因此在触发时,循环早已完成

您也可以只使用
$。每个
都可以进行迭代。

闭包和范围:

function runQueries(request, data) {
    var reports = ['103', '187', '190'];
    for (i=0; i < reports.length; i++) {
        (function(report) {
            $.ajax({
                url: request + '&reportType=' + report},
                data: data
            }).done(function(response) {
                if (report === '187') {
                      ...
                } else if (report === '190'( {
                      ...
                }
            });
         })(reports[i]);
    }
}
函数运行查询(请求、数据){
var报告=['103'、'187'、'190'];
对于(i=0;i
done()
方法是异步的,因此在触发时,循环早已完成


您也可以只使用
$。每个
进行迭代。

is
报告的问题比您的请求完成的速度更快。您可以通过关闭来避免这种情况。请记住,这不会按顺序发生

var reports = [ 1, 2, 3 ];

for( var i = 0; i < reports.length; i++ ){
    var report = reports[i];
    console.log(report);
    (function(report){
        $.ajax({
            url: '/echo/html',
        }).done(function(){
            switch( report ){
                case 3: console.log('Three!'); break;
                case 2: console.log('Two!'); break; 
                case 1: console.log('One!'); break;
            }
        });
    })(report);
}

您也可以简单地使用
$。每个
都可以,但是理解闭包有很大帮助,所以我做了很多工作!

报告的问题是
的变化速度比您请求完成的速度快。您可以通过闭包来避免这种情况。请记住,这不会按顺序发生

var reports = [ 1, 2, 3 ];

for( var i = 0; i < reports.length; i++ ){
    var report = reports[i];
    console.log(report);
    (function(report){
        $.ajax({
            url: '/echo/html',
        }).done(function(){
            switch( report ){
                case 3: console.log('Three!'); break;
                case 2: console.log('Two!'); break; 
                case 1: console.log('One!'); break;
            }
        });
    })(report);
}
您也可以简单地使用
$。每个
都可以,但是理解闭包有很大帮助,所以我走了很长的路