所以我有一个用户填写的表单,提交时会打开一个新选项卡以加载结果 - 脚本遍历多个 XML 文件 - 这可能是一个耗时的过程,因为该脚本中发生了很多事情(2-10 分钟)。我想要一些 AJAX 来跟踪结果页面的进度,所以我所做的是让结果页面更新用户的会话(您可能只想跳到我的问题底部)示例:
$_SESSION['fileCount'] = $fileCount;
for($i=0;$i<fileCount;$i++){//iterate through xmls
$_SESSION['curFile'] = $xml[...];
$_SESSION['curCount'] = $i;
//Do stuff
}
父页面上的表单标签如下所示:
<form action="results/" method="post" onsubmit="openProgressDialog()" target="_blank">
上面的函数看起来像:
function openProgressDialog(user){
$('#loadSplash').dialog('open');
var loading = true;
var sleep = 50;
var precent = 0;
var fileCount = 0;
var i = 0;
var curFile = '';
while(loading){
$.getJSON('php/getProgress.php?u='+user, function(data) {
var items = [];
$.each(data, function(key, val) {
if(key == 'fileCount')
fileCount = val;
else if(key == 'curCount')
i = val;
else if(key == 'curFile')
curFile = val;
});
if(fileCount > 0){
//Do stuff
$('#pregressbar').progressbar('value',(i/fileCount)*100);
if(i == fileCount){
sleep = 0;
loading = false;
}
}
}).delay(sleep);
}
}
最后 getProgress.php 看起来像:
<?php
session_start();
$progress =array('fileCount' =>intval($_SESSION['fileCount']),'curCount' =>intval($_SESSION['curCount']),'curFile'=>$_SESSION['curFile']);
echo json_encode($progress);
?>
所以我知道我只是使用了伪代码和真实代码的奇怪组合,而且我也知道 JS 函数不完整——我一直在监视 firebug 中的 NET 面板以验证功能。
所以我的问题是 getProgress.php 在 results/index.php 页面完成之前不会返回 - 这完全违背了所有这一切的目的。是否有关于多个 php 脚本同时执行或使用相同资源的问题,这是我在这里坚持的?
我在 LAMP/Ubuntu 上运行新版本的 apache/php。
作为旁注/问题,我对这个主题特别感兴趣,因为我正在计划一个使用 AJAX/php/mySQL/long polling 的多人游戏,我很好奇是否有什么我应该注意的冒险进入那个项目.