PHP中session_start()与JS setInterval冲突导致进度条无法实时显示的问题求助
PHP中session_start()与JS setInterval冲突导致进度条无法实时显示的问题求助
大家好,我最近遇到了一个非常棘手的问题,想请教下各位同行的解决方案。
我开发了一套数据导入的进度监控功能:用jQuery写了Ajax调用逻辑,通过setInterval()每秒请求一次process.php来获取数据库的处理进度,upload.php和import.php的逻辑都是正常运行的,这里就不展开说了。
先贴出我的jQuery代码:
$(document).ready(function(){ var clear_timer; $('#sample_form').on('submit', function(event){ event.preventDefault(); $.ajax({ url:"ajax/upload.php", method:"POST", // 其他Ajax配置参数 success:function(data){ if(data.success){ start_import(); clear_timer = setInterval(get_imported_data, 1000); } if(data.error){ // 错误场景处理代码 } } }) }); function start_import(){ $.ajax({ url:"ajax/import.php", success:function(){ } }) } function get_imported_data(){ $.ajax({ url:"ajax/process.php", success:function(data){ var total_data = $('#total_data').text(); var initial_rows = $('#initial_rows').text(); var width = Math.round(((data-initial_rows)/total_data)*100); if(width >= 100){ clearInterval(clear_timer); // 额外的Ajax处理参数 } } }) } });
对应的process.php代码如下:
session_start(); try{ $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $dbuser = "user"; $dbpass = "password"; $dbhost ="mysql:host=my_host;dbname=my_db;charset=utf8mb4"; $connect = new PDO($dbhost, $dbuser, $dbpass, $pdo_options); }catch(Exception $e){ // 异常错误处理逻辑 } $user_table = $_SESSION['user_table']; $query = "SELECT * FROM $user_table"; $statement = $connect->prepare($query); $statement->execute(); echo $statement->rowCount();
现在的问题是:
当process.php中保留session_start()时,进度条完全没法实时更新,只有等整个导入流程彻底结束后,才会一下子显示100%的进度;但如果我去掉session_start(),改用静态变量或者常量来指定数据表,进度条就能正常每秒更新一次,实时展示导入进度。
我翻了不少技术论坛,都没找到专门讨论session_start()(PHP端)和setInterval()(JS端)这种冲突关联的内容。可我必须依赖会话变量来获取用户选择的数据表,不能直接去掉session_start()。
有没有大佬遇到过类似的问题?能不能给我一些解决思路或者具体的方案呀?
内容来源于stack exchange
相关产品推荐
相关产品推荐

