同时进行两次长轮询和长轮询将禁用ajax请求

问题描述

一个长期民意测验工作正常,但第二个无效。另外,除非我中止第一次长轮询,否则所有ajax请求都无法正常工作

长时间轮询是否正常?

这些是ajax请求。

function CheckExpired() {
    console.log("Checking Expiry");
    CheckExpirationVar = $.ajax({
        url: 'CheckExpiry.PHP',type: 'POST',success: function(data){
            // Logs data and reloop
            console.log(data);
            CheckExpired();
        }
    });
}

function CheckDB(TradeID) {
    CheckDBVar = $.ajax({ url: 'CheckDB.PHP',data: {
            ID: TradeID
        },success: function(data){
            console.log(data);
            lastID = obj.id
            
            // Logs data and returns to loop
            CheckDB(lastID);
        }
    });
}

这些是PHP代码

一个用于CheckDB ajax。

<?PHP session_start();
    // set PHP runtime to unlimited
    set_time_limit(0);
    
    include "../PHP/ConnToDB.PHP";
    
    $sql = "SELECT * FROM Transaction WHERE EntryTime >= Now() - INTERVAL 20 SECOND ORDER BY ID DESC";
    while(true) {
        $result = MysqLi_query($conn,$sql);
        
        if (MysqLi_num_rows($result) > 0) {
            while ($TradeRow = MysqLi_fetch_assoc($result)) {
                
                if ($_POST["ID"] == $TradeRow["ID"]) {
                    sleep(1);
                    continue;
                }
                
                // Check if one of the Trades of the user is the same
                $Tradesql = "SELECT * FROM UserTransactions WHERE UserID = {$_SESSION['UserID']}";
                $TradeResult = MysqLi_query($conn,$Tradesql);
                
                if (MysqLi_num_rows($TradeResult) > 2) {
                    sleep(1);
                    continue;
                } else {
                    while ($temp = MysqLi_fetch_assoc($TradeResult)) {
                        $Trades[$temp["TradeID"]] = 123;
                    }
                }
                
                // START THE CHECKING OF THE NEW TradE
                if (!isset($Trades[$TradeRow["ID"]]) && isset($_SESSION["Traders"][$TradeRow["MasterID"]])) {
                    
                    $Investment = $_SESSION["Traders"][$TradeRow["MasterID"]]["Investment"];
                    
                    $_SESSION["CurrentTrade"] = array(
                        "ID" => $TradeRow["ID"],"TraderID" => $TradeRow["MasterID"]
                    );
                    
                    $returnArr = array(
                        "id" => $TradeRow["ID"],"direction" => $TradeRow["Direction"],"expiration" => $TradeRow["Expiration"],"assetID" => $TradeRow["Asset_ID"],"Investment" => $Investment,"TraderID" => $TradeRow["MasterID"]
                    );
                    
                    echo json_encode($returnArr);
                    exit;
                }
            }
        }
    }
?>

这是针对支票到期的ajax调用

<?PHP session_start();
    // set PHP runtime to unlimited
    set_time_limit(0);
    
    include "../PHP/ConnToDB.PHP";
    
    $sql = "SELECT * FROM UserTransactions WHERE UserID = {$_SESSION["UserID"]} AND ExpirationDate <= Now()";
    while(true) {
        $result = MysqLi_query($conn,$sql);
        
        if (MysqLi_num_rows($result) > 0) {
            while ($row = MysqLi_fetch_assoc($result)) {
                $deletesql = "DELETE FROM UserTransactions WHERE TradeID = {$row['TradeID']}";
                MysqLi_query($conn,$deletesql);
                
                $return = array(
                    "TransactionID" => $row["TransactionID"],"TraderID" => $row["TraderID"]
                );
                
                echo json_encode($return);
                exit;
            }
        }
    }
?>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)