【发布时间】:2013-04-29 16:10:23
【问题描述】:
我得到了这个 javascript 递归函数:
function doStuff(graphName) {
var groupArray = new Array();
groupArray[0] = "hour";
groupArray[1] = "day";
groupArray[2] = "month";
for(var i = 0; i < groupArray.length; i++) {
$.get("getchartdata", {"graphName" : graphName, "subgroup" : groupArray[i]})
.done(function(jsonData){
var data = eval(jsonData);
drawChart(data, data[0][0], data[0][1]);
});
}
setTimeout(doStuff, 10000);
}
现在的问题是它第一次运行良好,但10秒后再次尝试,它显示错误:
TypeError: data[0] is undefined in drawChart(data, data[0][0], data[0][1]);
为什么会发生这种情况?
如果我在setTimeout(doStuff(graphName), 10000);中添加参数
浏览器崩溃。
谢谢。
【问题讨论】:
-
永远不要在那里使用
eval! (不适用于 JSON 解析,在已经解析时也不适用) -
它不是递归函数。
-
请记住 $.get 是异步的,因此如果调用完成时间超过 10 秒,则在所有调用完成之前调用 doSomething 可能会导致问题。您可能想要使用 $.ajax 并设置 async = false。
-
@rontornambe 不,永远永远使用
async: false! -
虽然我不相信硬性规定,但在这种情况下,我同意异步是一个坏主意。更好的解决方案是包含一个计数器 should 并且在达到 groupArray.length 之前不调用 doSOthing。
标签: javascript function recursion