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

2024-01-10

我有许多从 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(使用前将#替换为@)

处理来自多个 AJAX JQuery 查询的独立数据 的相关文章

随机推荐