KOU*_*DAL 6 javascript php ajax jquery
我在这里遇到一个奇怪的问题.我正在使用javascript ajax(我使用jquery).现在的情景是;
一个ajax调用是调用一个php脚本,它基本上是一个长时间运行的进程,它设置了一些会话变量.
稍后在某些时间间隔(比方说,每2秒)我运行另一个ajax调用来检查会话变量,以了解进程(第一个PHP脚本执行)何时完成.
第一个php脚本从数据库中获取数据并将其拧入文件中.在每个提取中,我计算循环数并将其存储到会话变量中以保留某种跟踪记录.喜欢;
$i=0;
$_SESSION['time']=date('m-d-Y H:i:s');
while(...)
{
ini_set('session.use_only_cookies', false);
ini_set('session.use_cookies', false);
ini_set('session.use_trans_sid', false);
ini_set('session.cache_limiter', null);
session_start();
$_SESSION['tracksatus']="loop number : ".$i." time is :"$_SESSION['time'];
session_write_close();
$i++;
......
......
}
Run Code Online (Sandbox Code Playgroud)
我通过setIntervalajax 调用的另一个php脚本就是这样做的;
echo $_SESSION['trackstatus']
Run Code Online (Sandbox Code Playgroud)
设定的间隔ajax让我回归;
loop number 1 time is m-d-Y H:i:s
loop number 5 time is m-d-Y H:i:s
loop number 8 time is m-d-Y H:i:s
......
Run Code Online (Sandbox Code Playgroud)
然后再打几次电话;
loop number 1 time is m-d-Y H1:i1:s1
.....
Run Code Online (Sandbox Code Playgroud)
注意H:i:s的变化为H1:i1:s1
所以根据我的理解,php脚本正在调用两次.并且对于您的信息,相同的代码在12小时之前就可以正常工作.我之前遇到过这个问题,并以某种方式解决了它(试错,所以我不知道怎么样或者可能是自动的......好吧,实际上我没有线索).
能否请你告诉我我做错了什么?如果您需要更多信息,请提及.
有趣的是,它只是在询问了这个问题之后才按预期工作,甚至没有改变一行代码.但我想知道原因.
我想我知道原因是什么,PHP 将会话变量写入文件,但它仅在脚本执行结束时才执行,因此在长脚本结束之前您无法看到另一个脚本中会话的更改。
您可以通过session_write_close(); session_start();在每次更改会话数据后添加来修复它。
session_write_close会将更改写入 HD,以便另一个脚本可以读取它。
session_start将从 HD 加载会话,但请确保您的另一个脚本没有对会话进行任何更改,这些更改将被您的长脚本覆盖。
如果您使用单独的域,还有一件事:在实际 AJAX 调用发生之前,您的浏览器会OPTIONS向同一 URL 发送请求以检查 CORS 标头。因此,在脚本开始时检查HTTP METHOD,如果它HEAD或OPTIONSmakedie();
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |