JavaScript过度递归?

4
我正在尝试编写一段脚本,让数据输入到数据库后自动开始上传(我需要数据库生成的autoId来上传文件)。当我运行JavaScript代码时,该代码会运行PHP文件,但在调用其他PHP文件上传文件时失败。
too much recursion
setTimeout(testIfToegevoegd(),500); 

出错的脚本

send("/projects/backend/nieuwDeeltaak.php",'deeltaakNaam='+f.deeltaaknaam.value+'&beschrijving='+
                        f.beschrijving.value+'&startDatum='+f.startDatum.value+'&eindDatum='+f.eindDatum.value
                        +'&deeltaakLeider='+f.leiderID.value+'&projectID='+f.projectID.value,id);

                    function testIfToegevoegd(){

                        if(document.getElementById('resultaat').innerHTML == "<b>De deeltaak werd toegevoegd</b>"){
                            //stop met testen + upload file 

                            document.getElementById('nieuwDeeltaak').target = 'upload_target';
                            document.forms["nieuwDeeltaak"].submit()
                        }else{
                            setTimeout(testIfToegevoegd(),500);
                        }

                    }

                    testIfToegevoegd();

很抱歉我们不得不使用荷兰语名称,这是一个学校项目。

当我点击按钮再次调用所有这些代码(在出现错误后),它可以正常工作。


使用回调而不是轮询。 AJAX 的异步特性(第一个“A”代表“异步”)意味着回调是其核心,由于 XMLHttpRequestonreadystatechange 监听器支持。 send 是由第三方库定义还是您自己定义的? - outis
我们不得不为JavaScript编写自己的库。这需要大量的实验和搜索,以找到如何完成AJAX函数的核心部分。感谢您的提示,我会查看回调函数方面的信息。您有什么好的信息来源可以推荐吗? - Ken
1个回答

18
setTimeout(testIfToegevoegd(),500);
应该是这样的。
 setTimeout(testIfToegevoegd,500);

你需要传递函数本身,而不是它的结果


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接