我正在尝试通过ajax请求中的for循环将值发送到php文件来检查数据库中的值,“请求中的每个值”然后文件返回名为“avl”的变量 if $data["avl "]==1
所以它可用,如果不可用则不可用。
问题是我检查一个值流,它们都必须返回 1
才能继续我的过程,但条件不会等到 for 循环结束才进行检查。它在 for 循环开始之前检查条件,即使代码不是这样的。例如:它在 for 循环在第 50 行结束之前执行第 100 行中的条件。
var cartItemContainer = document.getElementsByClassName('cart-items')[0]
var cartRows = cartItemContainer.getElementsByClassName('cart-row')
var avl_qty = 1;
for (var i = 0; i < cartRows.length; i++) {
var cartItemContainer = document.getElementsByClassName('cart-items')[0]
var cartRows = cartItemContainer.getElementsByClassName('cart-row')
var cartRow = cartRows[i]
var titleElement = cartRow.getElementsByClassName('cart-item-title')[0]
var item = titleElement.innerText
var quantityElement = cartRow.getElementsByClassName('cart-quantity-input')[0]
var freequantityElement = cartRow.getElementsByClassName('cart-quantity-free-input')[0]
var quantity = quantityElement.value
var freequantity = freequantityElement.value
alert("before avilability ajax")
$.ajax({
url: "checkavlqty.php",
method: "POST",
data: {
item: item,
quantity: quantity,
freequantity: freequantity
},
dataType: "JSON",
success: function(data) {
alert(JSON.stringify(data));
if (data["avl"] == 0) {
alert("inside condistion")
avl_qty = 0;
}
}
})
}
alert(avl_qty)
它总是提醒 1
,即使 avl_qty 的最终值为 0
。
最佳答案
您在循环内执行的 ajax 调用是异步的,这意味着当执行到达 $.ajax[...]
行时,它将“在后台”运行,而正常执行会继续循环。
您的代码中最有可能发生的情况是,在循环中的 ajax 响应到达您之前,执行将到达 alert(avl_qty)
行。您可以通过运行脚本来测试这一点。您将看到它将执行 alert("before availability ajax")
,然后执行 alert(avl_qty)
,最后执行所有 alert(JSON.stringify( data));
来自 ajax 请求。
要解决此问题,您必须等待异步调用完成,you can use async/await甚至回调,here's an example .
关于javascript - 为什么 JavaScript 不在 while 循环内堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624141/