jQuery延迟对象的setInterval

时间:2018-05-21 17:46:27

标签: javascript ajax jquery-deferred

我试图更好地理解jQuery中延迟对象的使用。

下面的getData方法异步提取一些数据。完成后,它应显示在log的某个预定义(addToChart)部分。这应该定期发生,因此我在setInterval的{​​{1}}处理程序中使用getData

done

在上面的代码中,function getData() { return $.ajax({ url: 'https://demo-live-data.highcharts.com/time-data.csv', type: 'GET' }); } getData().done(addToChart, function() { setInterval(getData, 1000); }); function addToChart(data) { document.getElementById('log').innerText += data; } $(document).ready(function() { getData(); }); 似乎只被调用一次。如何定期调用它?

此外,是否有任何方法来实际调试此代码,而不是运行它并抓住我的头,为什么它不按预期行事? (我是JavaSCript的新手,万一你想知道)。我使用Firefox调试器逐步完成了代码,但这没有帮助。

3 个答案:

答案 0 :(得分:0)

你需要做一个while循环:

while (condition) {
    code block to be executed
}

或do / while循环:

do {
    code block to be executed
}
while (condition);

答案 1 :(得分:0)

setTimeout用于延迟函数 https://www.w3schools.com/jsref/met_win_settimeout.asp

您想要使用的是setInterval https://www.w3schools.com/jsref/met_win_setinterval.asp

所以看看你正在尝试做什么,我会这样做:

$(document).ready(function() {
    function getData() {
        $.ajax({
            url: 'https://demo-live-data.highcharts.com/time-data.csv',
            type: 'GET'
        }).done(addToChart);
    }

    function addToChart(data) {
        document.getElementById('log').innerText += data;
    }

    setInterval(getData, 1000);
});

答案 2 :(得分:0)

done移动到函数内部,以便每次函数执行时都会调用它,并请求成功

function getData() {
  return $.ajax({
      url: 'https://demo-live-data.highcharts.com/time-data.csv',
      type: 'GET'
    })
    .then(addToChart)
    .always(function() {
      setTimeout(getData, 1000);
    });
}

替代方法是在新功能中包装您当前正在做的事情

function getData() {
  return $.ajax({
    url: 'https://demo-live-data.highcharts.com/time-data.csv',
    type: 'GET'
  });
}

function loadChart() {
  getData()
    .then(addToChart)
    .always(function() {
      setTimeout(loadChart, 1000);
    });

}

loadChart()