javascript - php jquery ajax增量输出

标签 javascript php jquery ajax

我有一个调用 AJAX 脚本的网页 - ajax.php 。我正在使用 JQuery 发送 AJAX 请求。

脚本ajax.php通过 $_REQUEST 接收一些参数,基于此开始处理。该处理涉及多个步骤,在每个步骤结束时我想将一些反馈发送回页面 - 例如:

  • 第 1 步已完成
  • 第 2 步已完成
  • ...

完成所有步骤后 - 脚本 ajax.php将输出一个 TXT 文件,我通过以下方式输出:

header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="output.txt"');

我的问题是:

我有一个div在我想向用户显示步骤 1 已完成、步骤 2 已完成的页面中,...如果我使用 JQuery.ajax() ,将.done函数被多次调用?如果不是,最好的处理方法是什么?我可以使用 ob_implicit_flush在 PHP 中发送“步骤 x 已完成”消息?

最后,我将如何处理 .txt 文件的输出以便用户的浏览器下载它?我不想将文件保存在服务器上,然后陷入服务器磁盘空间、删除的 cron 作业等麻烦。

我可以选择执行多个 AJAX 请求 - 但我又不想这样做,因为这将使我的代码逻辑非常复杂,并且我必须在 $_SESSION 中保存大量数据。在请求中可见,这又是我不想做的事情。

最佳答案

在 AJAX 调用启动流程之后,您可以在循环中进行另一个 AJAX 调用,该调用请求、返回并显示当前的完成百分比,直到达到 100%。基本上,一个 AJAX 调用启动进程,然后进行一系列检查状态的调用。

这里有一些简单的 JavaScript 来实现你想要的:

<script>
    function startProcess() {
        //start your long-running process
        $.ajax({
            type: 'GET',
            url: "/longRunningProcess",
            async: true,
            success:function (data) {
                //do something - your long process is finished
            }
        });
    }
    function getStatus() {
        //check your progress
        $.ajax({
            type: 'GET',
            url: "/checkProgress",
            async: true,
            success:function (data) {
                //assume the data returned in the percentage complete
                var percentage = parseInt(data);

                //write your status somewhere, like a jQuery progress bar?

                if (percentage < 100) {
                    //if not complete, check again
                    getStatus();
                }
            }
        });
    }
</script>

关于javascript - php jquery ajax增量输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941123/

相关文章:

javascript - jQuery next 方法替代

JQuery如何将点击事件绑定(bind)到所有复选框

javascript - 如何在不重新加载或重定向页面的情况下使用 html 中的 php 将文本框的值保存到 .txt 文件?

javascript - 当显示设置为无时显示 div

javascript - 道场 : How to make PUT request on jsonRest store with callback method

javascript - 更改事件选项卡的颜色

php - 排序 html php mysql 表的问题

PHP 错误 : Uncaught TypeError: Cannot access offset of type string on string

javascript - 加载html后如何获取容器高度

javascript - 从 html 查询中删除 </tr>