$.post到PHP文件-在包含循环完成之前不会调用回调

$.post to PHP file - callback not being hit till containing loop finished?

本文关键字:回调 调用 循环 PHP post 文件 包含      更新时间:2024-05-06

我正在制作一个库存表,用户可以在其中输入要出库的库存数量,这个功能是为表中的每个成员验证数据库中的库存数量是否足以出库。

当我在Chrome上中断代码时,它似乎永远不会碰到$.post的内部代码,直到它完成了对表的循环。到那时,本应传递给AddIssue的数据只变为1和10,而不是其他数据。

这开始让我发疯了,所以我很感激能在这里指出我做错了什么

var issueArray =[];
function VerifyIssue()
{
    var numRows = document.getElementById("searchTable").rows.length - 2;
    var running = true;
    var str1 = "issue_";
    while(running == true)
    {
        if (numRows < 0 && running == true)
        {
            running = false;
            //insert code for success
            break;
        }
        else if (running == false)
        {
            break;
        }
        var str2 = numRows;
        var comb = str1.concat(str2);
        var issue_element = document.getElementById(comb);
        var q = issue_element.value;

        var i = issue_element.name;
        var idd = i.replace("issue_", "");
        var trimId = idd.trim();
        $.post
        (
            'includes/issueCheck.php',
            {
                id: trimId, 
                issueQuantity: q 
            },
            function(result)
            {
                alert(result);
                if (result < 0)
                {
                    alert("One of more quantities inputted are greater than held in stock");
                    running = false;
                }
                if (result > 0)
                {
                    addIssue(trimId, q);
                }
            }
        );
        numRows = numRows - 1;
    }
    alert(issueArray);
}
function addIssue(issueID, quant)
{
    var item = {};
    item.label = issueID;
    item.value = quant;
    issueArray.push(item);
}

这是$.post 调用的PHP

<?php
    $server = 'SQL2008';
    $connectionInfo = array( "Database"=>"rde_470585");
    $conn = sqlsrv_connect($server,$connectionInfo);
    $false = -1;
    $true = 1;
    $id = $_POST['id'];
    $quantity = $_POST['issueQuantity'];
    $query = "Select Quantity FROM Stock WHERE StockID = ?";
    $param = array($id);
    $res = sqlsrv_query($conn, $query, $param);
    $row =  sqlsrv_fetch_array($res, SQLSRV_FETCH_ASSOC);
    $dbQuantity = $row['Quantity'];
    if ($dbQuantity < $quantity)
    {
        echo $false;
    }
    else if($dbQuantity >= $quantity)
    {
        echo $true;
    }

您是否意识到您的函数(result){…}只有在收到服务器对POST请求的响应时才会被调用?您必须构建代码以将延迟考虑在内。

我仍在做这件事,根据@jojo的说法阅读Promises,但不确定它是否对我有效。

否则,我如何让javascript在恢复之前等待服务器响应?