php jquery ajax增量输出

时间:2015-10-05 04:07:46

标签: 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功能多次打电话?如果不是,最好的办法是什么?我可以在PHP中使用ob_implicit_flush发送'步骤x已完成的消息吗?

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

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

1 个答案:

答案 0 :(得分:0)

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