处理来自多个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)); */