我试图通过将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
。
答案 0 :(得分:1)
您在循环内执行的ajax调用是异步的,这意味着当执行到达$.ajax[...]
行时,它将“在后台”运行,而正常执行将在循环中继续进行。
代码中最有可能发生的事情是,执行将在循环的ajax响应到达您之前到达alert(avl_qty)
行。您可以通过运行脚本来进行测试。您会看到它将执行ajax请求中的alert("before avilability ajax")
,然后执行alert(avl_qty)
,最后执行所有alert(JSON.stringify(data));
。
要解决此问题,您将必须等待you can use async/await或异步回调here's an example结束。