我有许多从 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 createCallback(i) {
return function (r_data, textStatus, jqxhr) {
console.log(i);
};
}
/*
loop
post(..., createCallback(i));
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)