这让我有一段时间抓狂了。我有一个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.php
和update.php
都访问会话数据。为了确保会话中的数据一致性,对会话数据的访问被锁定,因此一次只有一个php进程可以访问会话。这意味着当calc.php
有会话时,没有其他页面访问可以读取它
您要做的是在calc.php
完成任何可能需要访问会话的操作之后,在它开始其耗时的任务之前,调用session_write_close()。
session_write_close()
写入当前会话的数据并释放锁。一旦calc.php
不再保持会话,来自update.php
的访问就可以读取它。