Wiktor Bedna..
10
更好的方法是使用setTimeout,因此您只在前一个请求完成时发出请求.
应该怎么做
想象一下,由于某种原因(服务器故障,网络错误)的请求需要比定义的时间更长的时间.你会有很多同时发出的请求,这没什么好处的.如果您决定将未来的时间差从10个缩短到1秒,该怎么办?
$(function() {
var storiesInterval = 10 * 1000;
var fetchNews = function() {
console.log('Sending AJAX request...');
$.ajax({
type: "GET",
url: "newstitles.php",
data: {
user: 'success',
some: ['other', 'data']
}
}).done(function(msg) {
$(msg).appendTo("#edix");
console.log('success');
}).fail(function() {
console.log('error');
}).always(function() {
// Schedule the next request after this one completes,
// even after error
console.log('Waiting ' + (storiesInterval / 1000) + ' seconds');
setTimeout(fetchNews, storiesInterval);
});
}
// Fetch news immediately, then every 10 seconds AFTER previous request finishes
fetchNews();
});
我知道,6年后.但是,我认为这对其他人来说是值得的.
为什么OP的代码不起作用?
值得注意的是,您的代码主要不起作用,因为您将ajaxd()函数调用作为字符串传递给setInterval.这不是一个好的做法,部分是因为setInterval期望全局定义功能.您应该使用对函数的引用,就像在我的示例中一样.这样,定义函数的位置和匿名与否都无关紧要.