编程语言
首页 > 编程语言> > php – 两个同时发生的AJAX请求不会并行运行

php – 两个同时发生的AJAX请求不会并行运行

作者:互联网

我有两个同时运行的AJAX请求有问题.我有一个PHP脚本,它将数据导出到XSLX.此操作需要花费大量时间,因此我正在尝试向用户显示进度.我正在使用AJAX和数据库方法.实际上,我很确定它曾经工作但我无法弄清楚为什么,它不再适用于任何浏览器.新浏览器有什么变化吗?

$(document).ready(function() {

        $("#progressbar").progressbar();

        $.ajax({
            type: "POST",
            url: "{$BASE_URL}/export/project/ajaxExport",
            data: "type={$type}&progressUid={$progressUid}" // unique ID I'm using to track progress from database
        }).done(function(data) {
            $("#progressbar-box").hide();
            clearInterval(progressInterval);
        });

        progressInterval = setInterval(function() {
            $.ajax({
                type: "POST",
                url: "{$BASE_URL}/ajax/progressShow",
                data: "statusId={$progressUid}" // the same uinque ID
            }).done(function(data) {
                data = jQuery.parseJSON(data);
                $("#progressbar").progressbar({ value: parseInt(data.progress) });
                if (data.title) { $("#progressbar-title").text(data.title); }
            });
        }, 500);

    });

>进度正在数据库中正确更新
> JS计时器正在尝试获取进度,我可以在控制台中看到它,但所有这些请求都在加载第一个脚本的整个持续时间,一旦脚本结束,这些ajax进度调用就会被加载

那么,为什么第二个AJAX调用等待第一个完成呢?

解决方法:

听起来像会话阻塞问题

默认情况下,PHP将其会话数据写入文件.当您使用session_start()启动会话时,它会打开要写入的文件并将其锁定以防止并发编辑.这意味着对于使用会话通过PHP脚本的每个请求必须等待第一个会话完成该文件.

解决此问题的方法是将PHP会话更改为不使用文件或关闭会话写入,如下所示:

<?php
    session_start(); // starting the session

    $_SESSION['foo'] = 'bar'; // Write data to the session if you want to

    session_write_close(); // close the session file and release the lock

    echo $_SESSION['foo']; // You can still read from the session.

标签:php,ajax,progress-bar,simultaneous
来源: https://codeday.me/bug/20190917/1808744.html