在循环中定位异步 AJAX 调用中的元素



我想知道在使用jquery循环浏览html元素时异步调用是如何工作的。我知道异步调用在进行服务器调用时不会停止迭代。这意味着,脚本会立即按顺序迭代下一个元素,即使来自调用的响应尚未完成。

我的问题是,在每次调用时,我都设置了不同的值,如下所示:

$(".businessUnit").each(function (index) {
var $element = $(this);
var iUCBU_KEY = $element.prop('data-iucbu_key');
var iENTE_KEY = $element.prop("data-iente_key");
$.ajax({
method: 'post',
url: '/CodeBase/LoadInsertCATETE_BASE1/',
data: {
iUCBU_KEY: iUCBU_KEY,
iENTE_KEY: iENTE_KEY
},
success: function (response) {
//will there be $element from sequence when call was made?
$element.find('input.price').val(response.price);
},
error: function (response) {
}
});      
});

哪些$element将更新?是$element是从哪个调用进行的,还是$element当前在哪个迭代中?来自服务器的响应可能需要几秒钟,因此迭代可以在调用 - 响应之间进一步执行多个元素。

ajax 调用中的$element将具有发出 ajax 调用时的值。

这是因为.each(中使用的回调形成了对其整个内容的闭包。

如果您要执行以下操作:

const businessUnits = $(".businessUnit");
for (let i = 0; i < businessUnits.length; i++){
var $element = $( businessUnits[i] );
.
.
.
$.ajax(....)
}

那么$element的值很可能是最后一个元素。

最新更新