Javascript JQuery AJAX引用的变量被覆盖 myVar=0; 对于(i=0;i{ sessionStorage.setItem(myVar+'Stored',JSON.stringify(response['somekey'])) }); myVar++; }

Javascript JQuery AJAX引用的变量被覆盖 myVar=0; 对于(i=0;i{ sessionStorage.setItem(myVar+'Stored',JSON.stringify(response['somekey'])) }); myVar++; },javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图实现的目标是:将密钥[myVar0Stored,myVar1Stored,…]存储到会话存储中 问题:如果AJAX调用需要很长时间,myVar=3可能会在存储前面的键之前发生,这意味着不会有“myVar0Stored、myVar1Stored、myVar2Stored”键。如果我发出同步GET请求,它可能会锁定浏览器,直到收到响应。如果我想将密钥存储在会话存储中,我不确定如何实现这一点 tl;dr-如何在myVar在循环中更新之前获取其值?我不确定您为什么首先要将myVar设置为全局值。问

我试图实现的目标是:将密钥[myVar0Stored,myVar1Stored,…]存储到会话存储中

问题:如果AJAX调用需要很长时间,myVar=3可能会在存储前面的键之前发生,这意味着不会有“myVar0Stored、myVar1Stored、myVar2Stored”键。如果我发出同步GET请求,它可能会锁定浏览器,直到收到响应。如果我想将密钥存储在会话存储中,我不确定如何实现这一点


tl;dr-如何在myVar在循环中更新之前获取其值?

我不确定您为什么首先要将
myVar
设置为全局值。问题的根源在于,由于arrow函数中的
myVar
将是全局变量的当前值。如果您只使用
让i
(也从0变为4),它将有一个局部范围,确保箭头函数中引用的
i
特定于循环的迭代

myVar=0;
for(i=0;i<5;i++){
    $.ajax({
        //AJAX Paramters
    }).success((response) => {
        sessionStorage.setItem(myVar+'Stored', JSON.stringify(response['somekey']))
    });
    myVar++;
}
for(设i=0;i{
sessionStorage.setItem(i+'Stored',JSON.stringify(response['somekey']))
});
} 

这是异步执行中面临的一个常见问题,如果您同时使用timeout来解决这个问题,您将遇到同样的问题,请使用该函数中的函数来进行ajax调用

问题在于,当您试图执行和使用myVar的值时,ti将被更改 所以为了解决这个问题,你不能使用同一个myVar变量,而不是调用一个函数pass myVar作为该函数中的参数make ajax call,这样你传递的任何值都将被使用,而不是一个变量

for(let i=0;i<5;i++){
   $.ajax({
      //AJAX Paramters
   }).success((response) => {
      sessionStorage.setItem(i+'Stored', JSON.stringify(response['somekey']))
   });
} 
myVar=0
对于(var i=1;i{
sessionStorage.setItem(myVar+'Stored',JSON.stringify(response['somekey']))
});
})(i) );
迈瓦尔++
}
你也可以这样写

myVar = 0
for (var i = 1; i <= 3; i++) {
(function(myVar) {
    $.ajax({
    //AJAX Paramters
}).success((response) => {
    sessionStorage.setItem(myVar+'Stored', JSON.stringify(response['somekey']))
});
})(i);
myVar++
}
myVar=0;
对于(i=0;i{
sessionStorage.setItem(myVar+'Stored',JSON.stringify(response['somekey']))
});
}
使用闭包<代码>(函数(索引){$.ajax({//ajax参数}).success((响应)=>{sessionStorage.setItem(索引+'Stored',JSON.stringify(响应['somekey'])))})(myVar)
myVar=0;
for(i=0;i<5;i++){
makeAjaxCall(myVar)

myVar++;
}


function makeAjaxCall(i) {
 $.ajax({
    //AJAX Paramters
}).success((response) => {
    sessionStorage.setItem(myVar+'Stored', JSON.stringify(response['somekey']))
});
}