PHP按顺序执行ajax调用


PHP executing ajax calls sequentially

这让我有一段时间抓狂了。我有一个ajax电话,是这样的:

function update()
{
    $.get("update.php", function(data)
    {
        $("#output-progress").html(data);
    });
}

我这样称呼它:

window.setInterval(function()
    {
        update();
    }, 2000);
}

然后我有另一个计算函数,它也被称为:

function calc()
{
    $.get("calc.php", function(data)
    {
        //whole bunch of lines to re-render page
    });
}

因此,当calc()运行时,update()将定期更新进度上的div。

然而,如果我打开控制台并检查对update()的调用是否每5秒触发一次,但它们只是暂停,并且只有在calc()返回后才完成。我最初认为这是一个browser/jQuery问题,但如果我在PHP中将两个函数都记录到单独的日志文件中,那么update()只有在calc()完成后才会被记录!

我不知道这里发生了什么,任何指点都将不胜感激!

很可能,您正在使用会话,并且calc.phpupdate.php都访问会话数据。为了确保会话中的数据一致性,对会话数据的访问被锁定,因此一次只有一个php进程可以访问会话。这意味着当calc.php有会话时,没有其他页面访问可以读取它

您要做的是在calc.php完成任何可能需要访问会话的操作之后,在它开始其耗时的任务之前,调用session_write_close()。

session_write_close()写入当前会话的数据并释放锁。一旦calc.php不再保持会话,来自update.php的访问就可以读取它。