我需要为长时间运行的PHP脚本创建进度条,所以我决定将脚本进度写入json文件,然后通过Javascript读取它。在Firefox中一切正常,但如果我将浏览器更改为Chrome,它就会停止工作。控制台窗口中没有错误。当用户启动PHP脚本时,Chrome只会停止加载json文件,但它会在PHP执行开始之前读取此文件。 我的代码或Chrome浏览器的正常行为是否有问题?
PHP:
$fp = fopen($this->writeFile, "w");
fwrite($fp, json_encode($values));
fclose($fp);
//for safety we will make a copy and let client access the copy.
copy($this->writeFile, $this->readFile);
使用Javascript:
getProgress();
function getProgress() {
$.ajaxSetup({ cache: false });
$.getJSON("../../../../upload/status.json", function(data) {
var pbvalue = 0;
if(data){
var total = data['total'];
var current = data['current'];
if(total != 0)
pbvalue = Math.floor((current / total) * 100);
$(".progress-bar .indicator").width(pbvalue+"%");
$(".progress-text").text(current+"/"+total);
}
if(pbvalue < 99)
setTimeout("getProgress()", 3000);
});
}
JSON文件:
{"total":"0","current":"0"}
编辑1: 感谢超时提示,但它在Firefox中运行良好(问题)在Chrome控制台内没有“XHR完成加载”响应我启动PHP执行后(在它按照预期每3秒加载一次文件之前)
编辑2: 可能这个问题的原因是我尝试在用户提交表单后读取此JSON文件。我想由于某些原因,Chrome表单提交后不再允许执行jQuery $ getJSON函数。任何变通办法都将受到赞赏。
答案 0 :(得分:0)
我甚至尝试制作能够读取json文件的flash动画,但它也不起作用(看似提交Chrome后停止更新当前显示的页面)。 对我来说,唯一有效的解决方案是重新设计代码并通过ajax调用而不是传统的表单提交来执行PHP函数。