即使在jquery函数遇到条件后,Firefox也无限运行

时间:2011-01-04 21:51:29

标签: javascript jquery ajax

使用

调用以下函数
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);
            }
        });
    }
});}

1 个答案:

答案 0 :(得分:3)

在每次成功从AJAX调用返回时,您将设置一个全新的间隔计时器。几次成功之后,会有很多间隔计时器在运行。 (请注意,与setTimeout()不同,setInterval()会建立一个定时例程,将一遍又一遍地运行,直到记录时间的最后一个音节。)

哦,每次运行时都会再次调用“get_progress”。

所以在第一次调用之后,会有一个间隔计时器在运行。四秒钟之后,它会再次出现,另一个间隔计时器将启动。 4秒后,现在将对“get_progress”进行两次调用,每个间隔计时器处理程序一次。太棒了 - 现在四秒钟之后,会有四次调用“get_progress”。等等;大约一分钟之后会有成千上万的人(我正在度假,所以我不会为了做正确的数学而烦恼: - )

不要在ajax“成功”处理程序中调用setInterval(),而是调用setTimeout()