You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.09 03:00:29