2014-08-29 123 views
0

我在for循环中放置了一个异步回调函数(类似$.ajax)。这看起来多少有点像(编辑:更新的代码,见注释):JSHint:循环中的异步函数

var i = 0; 

for (; i < 5; i++) { 
    (function(index) { 
    $.ajax({ 
     url: "", 
     success: function() { 
     console.log(index); 
     } 
    }); 
    })(i); 
} 

它的工作,但JSHint给了我一个警告,说是这样的:

“不要把函数中环“

通常我可以将我的callback函数放在我的循环之外并在每次迭代时调用该函数。不幸的是,我需要访问循环内分配的变量(例如i)。所以我在寻找一个解决方案做类似如下:

var i = 0; 

function callback(data) { 
    // I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data" 
    // in this function. But I only have access to "data", because "i" 
    // will always be 5 
} 

for (; i < 5; i++) { 
    $.ajax({ 
    url: "", 
    success: callback 
    }); 
} 
+3

那么,在你的第一个例子中,'i'在所有的回调中也是'5'。请参见[JavaScript闭合内部循环 - 简单实例](http://stackoverflow.com/q/750486/218196)。 – 2014-08-29 20:47:35

+1

您是否必须循环...您不能发送一个包含所有数据的请求吗? – tymeJV 2014-08-29 20:47:40

+0

只需修复您的for循环并将此行添加到您的ajax调用'async:false' – Hackerman 2014-08-29 20:54:53

回答

2

在这种情况下,你可以使用一个返回访问你需要的数据功能的功能。

var i = 0; 
function callback(i) { 
    return function (data) { 
    // I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data" 
    // in this function. 
    console.log(i) 
    } 
} 

for (; i < 5; i++) { 
    $.ajax({ 
    url: "", 
    success: callback(i) 
    }); 
} 

但是,当然最好是用单个请求而不是循环提交这些数据。