如何每10秒重复一次jQuery ajax调用?
$(document).ready(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg) {
$(msg).appendTo("#edix");
}
});
我试图用函数包装$ .ajax并用setInterval调用函数
$(document).ready(function() {
function ajaxd() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg) {
$(msg).appendTo("#edix");
}
});
}
setInterval("ajaxd()",10000);
});
但它说“ajaxd未定义”
答案 0 :(得分:49)
您的方法不应放在准备方法内,或者仅在那里可用,而不是在外面。
$(document).ready(function() {
setInterval(ajaxd, 10000);
});
function ajaxd() {
$.ajax({
type: "GET",
url: "newstitles.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}
答案 1 :(得分: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();
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
我知道,6年后。但是,我认为这对其他人来说是值得的。
值得注意的是,您的代码主要不起作用,因为您将ajaxd()
函数调用作为字符串传递给setInterval
。它的不是一个好的做法,部分原因是setInterval
期望函数全局定义。您应该使用对函数的引用,就像在我的示例中一样。这样,定义函数的位置以及它是否匿名无关紧要。
答案 2 :(得分:8)
$(document).ready(function() {
setInterval(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}, 10000);
});