【问题标题】:why java script doesn't stack inside the while loop为什么javascript不会在while循环中堆叠
【发布时间】:2019-12-28 15:38:47
【问题描述】:

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您在循环中执行的 ajax 调用是异步的,这意味着当执行到达$.ajax[...] 行时,它将在“后台”运行,而正常执行将继续通过循环。

    您的代码中最有可能发生的是,在循环的 ajax 响应到达您之前,执行将到达 alert(avl_qty) 行。您可以通过让脚本运行来测试它。您会看到它将执行 alert("before avilability ajax"),然后是 alert(avl_qty),最后是来自 ajax 请求的所有 alert(JSON.stringify(data));

    要解决此问题,您必须等待异步调用完成,you can use async/await 甚至回调,here's an example

    【讨论】:

    • 这意味着所有的ajax请求都是异步运行的?抱歉这个愚蠢的问题,但我是一个新的开发者
    • 不用担心,没有愚蠢的问题。是的,AJAX 请求始终是异步的。如果你想了解更多关于你正在使用的 jQuery ajax 方法的信息,你可以read it here
    猜你喜欢
    • 2012-11-07
    • 2021-04-14
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2021-12-26
    • 2016-04-21
    相关资源
    最近更新 更多