我有一个调用AJAX脚本的网页 - ajax.php
。我正在使用JQuery发送AJAX请求。
脚本ajax.php
通过$_REQUEST
接收一些参数,基于它开始处理。处理涉及多个步骤,在每个步骤结束时,我想将一些反馈发送回页面 - 例如:
完成所有步骤后,脚本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
中保存大量数据在请求中可见,这也是我不想做的事情。
答案 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>