使用
调用以下函数setTimeout(function () { get_progress(fileID,fileName)},8000);
表格提交。该函数的目的是让read_file.php读取一个txt文件,该文件存储表单中的文件上载状态(百分比)。
达到80%后,即使HEAD返回错误,我的Firefox也似乎无限运行。我是否有太多的递归或者我使用了错误的条件导致get_progress重复运行,即使文件夹中不存在文件名?
function get_progress( fileID, filename) {
$.ajax({
url: filename,
type: 'HEAD',
success: function() {
$.ajax({
type: 'POST',
url: 'read_file.php',
data: 'filename=' +filename,
success: function(html) {
document.getElementById(fileID).innerHTML = html + ' <img src="images/loading.gif" />'
setInterval(function() {get_progress(fileID,filename)},4000);
}
});
}
});}
答案 0 :(得分:3)
在每次成功从AJAX调用返回时,您将设置一个全新的间隔计时器。几次成功之后,会有很多间隔计时器在运行。 (请注意,与setTimeout()
不同,setInterval()
会建立一个定时例程,将一遍又一遍地运行,直到记录时间的最后一个音节。)
哦,每次运行时都会再次调用“get_progress”。
所以在第一次调用之后,会有一个间隔计时器在运行。四秒钟之后,它会再次出现,另一个间隔计时器将启动。 4秒后,现在将对“get_progress”进行两次调用,每个间隔计时器处理程序一次。太棒了 - 现在四秒钟之后,会有四次调用“get_progress”。等等;大约一分钟之后会有成千上万的人(我正在度假,所以我不会为了做正确的数学而烦恼: - )
不要在ajax“成功”处理程序中调用setInterval()
,而是调用setTimeout()
。