在jquery ajax调用中使用setInterval的最佳方法是什么?

fiq*_*bal 1 javascript ajax jquery setinterval

我正在使用JQWidgets来创建饼图.虽然这一切都很好,花花公子,像一个魅力.然而,我想要做的是每x秒更新一次数据.使用jQuery,这是我到目前为止的代码:

function loadChart(id,name){
   //chart loads here
   var speed = 5000,
       t = setInterval(reloadData,speed);
   function reloadData() {
        source.url = 'data.php?id='+id;
        var dataAdapter = new $.jqx.dataAdapter(source);
        $('#pie').jqxChart({ source: dataAdapter });
        console.log('reloading pie...'+globalPieId);
        speed = 5000;
        clearInterval(t);
        t = setInterval(reloadData, speed);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果调用了loadChart函数,则会创建另一个setInterval实例,并且在三到四次之后,图表将处于常量刷新状态.如何优化我的setInterval调用,以便只调用一个实例?

提前致谢.

lfx*_*ove 7

而不是使用setInterval哪个函数一遍又一遍地调用函数,你最好使用setTimeout函数调用你指定的回调一次.一旦调用回调,你就可以再次打电话setTimeout,你就会停止解决你现在遇到的问题.此外,你会等到最后一次通话完成后才开始做另一个也很好的.代码看起来可能与此类似:

function loadChart(id,name){
   //chart loads here
   var speed = 5000,
       t = setTimeout(reloadData,speed);
   function reloadData() {
        source.url = 'data.php?id='+id;
        var dataAdapter = new $.jqx.dataAdapter(source);
        $('#pie').jqxChart({ source: dataAdapter });
        console.log('reloading pie...'+globalPieId);
        speed = 5000;
        t = setTimeout(reloadData, speed);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于一个工作伙伴你可以看到http://jsfiddle.net/9QFS2/

  • 这个.至少可以说`setInterval`是有问题的. (2认同)