Javascript 带有for循环的AJAX Done()函数
我有一个for循环,它遍历3个值(不同的报告编号)的数组,并为每个值发送一个AJAX请求。我希望.done()函数对于返回的每个报告都有不同的行为。但是,我不确定如何使报告编号可用于done函数。如果我没有将报告编号作为参数传递给done()函数,那么它总是认为报告编号是“190”,即数组中的最后一个值。如果我传递它,如下所示,它显示为未定义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'];
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);
}
您也可以简单地使用$。每个都可以,但是理解闭包有很大帮助,所以我走了很长的路