重复jQuery ajax调用
如何每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没有定义”
您的方法不应该放在ready方法中,或者只能在那里使用,而不是在外面。
$(document).ready(function() { setInterval("ajaxd()",10000); }); function ajaxd() { $.ajax({ type: "GET", url: "newstitles.php", data: "user=success", success: function(msg){ $(msg).appendTo("#edix"); } }); }
$(document).ready(function() { setInterval(function() { $.ajax({ type: "GET", url: "newstitle.php", data: "user=success", success: function(msg){ $(msg).appendTo("#edix"); } }); }, 10000); });
更好的方法是使用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(); });