我试图更好地理解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调试器逐步完成了代码,但这没有帮助。
答案 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()