【问题标题】:php jquery ajax incremental outputphp jquery ajax 增量输出
【发布时间】:2016-01-01 16:02:15
【问题描述】:

我有一个调用 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 函数会被调用多次吗?如果不是,最好的处理方法是什么?我可以在 PHP 中使用ob_implicit_flush 发送“步骤 x 完成”消息吗?

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

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

【问题讨论】:

标签: javascript php jquery ajax


【解决方案1】:

在您的 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>

【讨论】:

  • 谢谢,但这会导致向服务器发送多个结果。我想我将不得不将函数分解为多个部分......
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多