Php Javascript:递归AJAX回调和最大嵌套级别
我在理解代码正确工作的原因方面有问题:) 以下是我的代码部分:Php Javascript:递归AJAX回调和最大嵌套级别,php,javascript,ajax,recursion,Php,Javascript,Ajax,Recursion,我在理解代码正确工作的原因方面有问题:) 以下是我的代码部分: function updateForNextLecturer(current_id, all_lecturers, progressbar) { $.getJSON( '/' + root + 'custom/ajax/update_timetable_lecturer.php?id=' + all_lecturers[current_id], function(data) {
function updateForNextLecturer(current_id, all_lecturers, progressbar)
{
$.getJSON(
'/' + root + 'custom/ajax/update_timetable_lecturer.php?id=' + all_lecturers[current_id],
function(data)
{
if (data.successfull == 0) {
$.stickr({note: "Error occurred.", className: "classic error"});
throw new Error("error");
}
else {
percent = Math.round((current_id + 1) * 100.0 / all_lecturers.length);
progressbar.progressbar({value: percent});
if (current_id + 1 < all_lecturers.length)
updateForNextLecturer(current_id + 1, all_lecturers, progressbar);
else
$.stickr({note: "Success", className: "classic"});
}
}
);
}
我用数千个请求测试了这个函数,因此嵌套级别大约为数千,但没有发生错误。这是因为JavaScript中根本没有嵌套限制,还是因为我不懂什么
提前感谢。这不是真正的递归
updateFornext讲师
将在$.getJSON
之后退出。请求完成后,将调用匿名函数。这是主循环的一部分,主循环处理所有事件,包括匿名回调函数的执行
因此,在给定的时间内最多运行一个updateFornext讲师
,除了$.getJSON
之外,没有任何嵌套函数调用
这就是异步JavaScript的强大功能。事情可以在他们准备好的时候发生
跑步儿童类比
假设你有两个孩子,尤利克和杰森。你给两个人一个任务:
- Ulec给了杰森一些他想查询的信息
- 杰森准备好后给乌莱克信息
updateFornext讲师
,而Jason是$.getJSON
。邮件实际上是ajax请求成功后的一小段等待时间,是主循环中的事件处理
这与递归调用有很大区别。在这种情况下,Ulec会给自己一份工作,或者克隆自己给自己一份工作。但是克隆工作不会持续太久,记住他需要做的所有工作也不会太久。这不是真正的递归
updateFornext讲师
将在$.getJSON
之后退出。请求完成后,将调用匿名函数。这是主循环的一部分,主循环处理所有事件,包括匿名回调函数的执行
因此,在给定的时间内最多运行一个updateFornext讲师
,除了$.getJSON
之外,没有任何嵌套函数调用
这就是异步JavaScript的强大功能。事情可以在他们准备好的时候发生
跑步儿童类比
假设你有两个孩子,尤利克和杰森。你给两个人一个任务:
- Ulec给了杰森一些他想查询的信息
- 杰森准备好后给乌莱克信息
updateFornext讲师
,而Jason是$.getJSON
。邮件实际上是ajax请求成功后的一小段等待时间,是主循环中的事件处理
这与递归调用有很大区别。在这种情况下,Ulec会给自己一份工作,或者克隆自己给自己一份工作。但是克隆不会工作太久,记住他需要做的所有作业也不会太久。虽然此特定示例不会溢出堆栈,因为异步回调总是在新堆栈上执行,。而此特定示例不会溢出堆栈,因为异步回调总是在新堆栈上执行。
Fatal error: Maximum function nesting level of '100' reached, aborting!