javascript - 为什么 JavaScript 不在 while 循环内堆叠

标签 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

最佳答案

您在循环内执行的 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/

相关文章:

javascript - 基于 category_id 的循环大小

javascript - 重新启动 Apache Tomcat 以提供更改的 Javascript 文件?

javascript - 需要使用 javascript 为下拉列表创建 onChange/onSelect

javascript - 有条件地显示图像

javascript - Protractor - 等待多个元素

javascript - 隐藏与删除 DOM 元素

javascript - 使用 jQuery setInterval 减小元素的宽度,但仅从一侧(左或右)

javascript - Stripe.js 保留多个支付 token

javascript - 检测多个显示器的屏幕宽度

javascript - 为什么取消转义字符串会弄乱我的正则表达式?