为什么Java脚本不堆积在while循环内

时间:2019-08-23 10:12:53

标签: javascript

我试图通过将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

1 个答案:

答案 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结束。