微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 多次自动调用Php脚本

在这里遇到一个奇怪的问题.
我正在使用 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++;

     ......
     ......
 }

我通过setInterval ajax调用的另一个PHP脚本就是这样;

echo $_SESSION['trackstatus']

设定的间隔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
  ......

然后再打几次电话;

loop number 1 time is m-d-Y H1:i1:s1
  .....

注意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或OPTIONS make die();

原文地址:https://www.jb51.cc/js/150493.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐