处理来自多个AJAX JQuery查询的独立数据

我有一些从for循环发送的AJAX请求,并希望根据循环中的位置将一些数据发送到回调函数。

当我尝试将函数附加到每个请求时,它们似乎都从上次调用中获取数据,例如,

for(var i=0; i < 4; i++){ data = ... //some unique data req = $.post('/update/add', data, function(r_data, textStatus, jqxhr){ console.log(data); }, "json") } 

会从i = 3条目而不是4个不同的条目给我数据。 如何将这些数据传递给回调函数?

感谢你们…

问题是当在i变量上创建闭包时,它引用相同的变量而不是创建新的i变量。 为避免这种不良影响,您可以执行以下操作。

 for(var i=0; i < 4; i++){ data = ... //some unique data req = $.post('/update/add', data, (function (i) { //return a new callback function return function (r_data, textStatus, jqxhr) { //callback logic //i will be the right index now }; })(i), "json"); } 

在上面的例子中,我们将回调函数包装在一个自动执行的函数中,该函数正在传递循环的i值。 由于i变量是在自执行函数的范围内定义的,我们现在可以安全地返回一个新的回调函数,它将在自执行函数的i变量上创建一个闭包,而不是在循环中使用的i变量。

注意:要优化代码,您可以避免每次都创建新的自执行function。

 function createCallback(i) { return function (r_data, textStatus, jqxhr) { console.log(i); }; } /* loop post(..., createCallback(i)); */