PHP顺序执行ajax调用

时间:2016-01-08 06:09:52

标签: javascript php jquery ajax

这让我疯了一会儿。我有ajax这样的电话:

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

我称之为:

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

然后我有另一个calc函数,也称为:

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

因此,我们的想法是calc()正在运行,update()会定期更新进度的div。

然而,正在发生的事情是,如果我打开控制台并检查每隔5秒触发update()的呼叫,但它们只是停止并且仅在calc()返回后才完成。我首先认为这是一个browser/jQuery问题,但如果我将这两个函数记录到PHP中的单独日志文件中,那么只有在update()完成后才会记录calc()

我不确定这里发生了什么,非常感谢任何指针!

1 个答案:

答案 0 :(得分:1)

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

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

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