gpt4 book ai didi

javascript - 删除ajax内的对象

转载 作者:行者123 更新时间:2023-11-28 19:24:03 24 4
gpt4 key购买 nike

从数组中删除对象并更新 ListView 时,我遇到了 ajax 调用问题。

在循环内,如果我可以确认在线删除对象,我想从 native 数组中删除同一对象。问题是从 native 数组中删除不起作用,我不知道为什么。

代码:

for (var i = 0; i < tempShoppingCartArray.length; i++) {
var row = tempShoppingCartArray[i];

if(chosenSubMenuID.sid == row.sid && row.sent == 0){

var myUrl = someURL

$.ajax({
type: "POST",
url: myUrl,
crossDomain: true,

beforeSend: function(xhr) {

xhr.setRequestHeader("Authorization", wsTOKEN);
},

success: function(response) {

tempShoppingCartArray.slice(i,1); //this code does not work
$("#shopping-list li").eq(i).remove(); //this code does not work

},
error: function(jqXHR, exception) {

}
});
}
}

最佳答案

您遇到的问题是因为尽管您认为在 ajax 请求的 success 方法中 i 将等于 的当前迭代>for 循环,它实际上将具有所有请求的最终值。

拿这个example :

var array = ["a","b","c"];
for(var i=0;i<array.length;i++){
$.ajax({
method:'GET',
url: '/echo/json',
success: function(){
console.log(i,"success");
}
});
};

您可能期望控制台中的输出是

0 success
1 success
2 success

实际上是这样的

3 success
3 success
3 success

这是由于 ajax 调用的异步特性,使得调用控件立即返回,因此会依次执行所有 3 个请求。当调用第一个 success 时,循环控制变量已达到其限制(本例中为 3)。

解决这个问题的方法是使用 IIFE 围绕 ajax 调用生成一个范围。 ,并将循环控制变量作为参数传递,这给出 expected result :

var array = ["a","b","c"];    
for(var i=0;i<array.length;i++){

(function(x){
$.ajax({
method:'GET',
url: '/echo/json',
success: function(){
console.log(x,"success");
}
});
})(i)
};

0 success
1 success
2 success

关于javascript - 删除ajax内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28214744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com