这让我疯了一会儿。我有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()
!
我不确定这里发生了什么,非常感谢任何指针!
答案 0 :(得分:1)
最有可能的是,您正在使用会话,并且calc.php
和update.php
都会访问会话数据。为了确保会话中的数据一致性,会话数据的访问被锁定,因此一次只能有一个php进程访问会话。这意味着虽然calc.php
有会话,但没有其他页面访问权限可以读取它。
您要做的是在calc.php
完成可能需要访问会话的任何内容之后,在它开始耗时的任务之前调用session_write_close()。
session_write_close()
写入当前会话的数据并释放锁定。一旦calc.php
不再持有会话,update.php
的访问权限就可以读取它。