当前位置: 首页 > 知识库问答 >
问题:

为什么java script不在while循环中堆栈

唐增
2023-03-14

我试图通过将ajax请求中的for循环的值发送到php文件来检查数据库中的值,“each value in request”,然后文件返回变量“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个答案

封烈
2023-03-14

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

在您的代码中最有可能发生的情况是,在来自循环的ajax响应到达您之前,执行会到达alert(avl_qty)行。您可以通过运行脚本来测试这一点。您将看到它将从ajax请求中执行警报(“avilability ajax之前”),然后执行警报(avl_qty),最后执行所有警报(json.stringify(data));

为了解决这个问题,您将不得不等待异步调用完成,您可以使用async/Await甚至回调,下面是一个示例。

 类似资料:
  • 我正在写一份简单的银行申请书。在我的程序中,我使用了while循环。如果用户输入错误,它将再次提示用户输入。 现在的问题是我无法编写任何语句。它总是显示错误(比如:unreachable语句),最终该行不会被打印出来。 我该怎么解决这个问题? [我之所以需要使用,是因为我想打印用户输入的所有信息。] 我正在从事的项目:

  • 所以我这里有一个程序,它只是简单地模仿跳棋(但不是跳,而是一个棋子简单地“吃掉”另一个棋子)。我有一个简单的类,它实现了一个“checkers”类对象,并创建了一个名为“chips”的int数组变量。还有一个“while”语句,它在chip[0]和chips[1]整数大于0时创建了一个循环。看起来是这样的: Checkers类中的count方法如下所示: 板是8 x 8(这就是board.leng

  • 问题内容: 我一直在使用“ if”来测试自己的版本,并且一切似乎都正常。当然,如果使用signalAll()而不是signal(),这将导致严重崩溃,但是如果一次仅通知一个线程,这怎么会出错? 他们的代码在这里 -检查put()和take()方法;在Condition的JavaDoc顶部可以看到一个更简单,更重点的实现。 下面是我实施的相关部分。 PS我知道,通常,尤其是在这样的lib类中,应该让

  • 问题内容: 以下示例在Node.js书中给出: 解释了while循环为何阻止执行时,作者说: 节点将永远不会执行超时回调,因为事件循环卡在了循环中,而循环在第7行开始了,因此永远不会给它处理超时事件的机会! 但是,作者没有解释为什么这是在事件循环的背景下发生的,还是在幕后真正发生了什么。 有人可以详细说明吗?为什么节点卡住?以及如何在保留控制结构的同时更改上述代码,以使事件循环不会被阻塞,并且代码

  • 我想我的程序跳过了while循环,但我真的不确定到底发生了什么。该函数应该通过找到GCD,然后将分子和分母除以该数字来减少分数。 我得到分子和分母的绝对值,以确保如果分数是负数,我会在最后保持它。如果分子为0,则要求我返回(0,1)。问题是关于while循环。。。似乎它被完全跳过了。有什么建议吗?

  • 本文向大家介绍JavaScript do ... while循环,包括了JavaScript do ... while循环的使用技巧和注意事项,需要的朋友参考一下 示例 一个do while循环保证至少运行一次,因为它的条件是在一个迭代结束时只检查。传统while循环可能会运行零次或多次,因为在迭代开始时会检查其条件。