jQuery - 每 10 秒调用一次 ajax
Posted
技术标签:
【中文标题】jQuery - 每 10 秒调用一次 ajax【英文标题】:jQuery - Call ajax every 10 seconds 【发布时间】:2011-08-06 22:52:48 【问题描述】:我有一个这样构建的mysql反馈数据库:
名称 |位置 |反馈
瑞恩 |英格兰 |大力支持
显然有比这更多的条目。我正在尝试构建一个反馈 div,它通过 ajax 每 10 秒显示一个新的反馈项。
所以我构建了这个:
$(document).ready(function()
new get_fb();
);
function get_fb()
var feedback = $.ajax(//Ajax
type: "POST",
url: "feedback.php",
async: false
).responseText;//end of ajax
$('div.feedback-box').html(feedback).delay(10000).queue(function()
new get_fb();
);
这是我的 PHP 文件:
$result = mysql_query("SELECT * FROM feedback ORDER BY RAND() LIMIT 0,1");
while($row = mysql_fetch_array($result))
$name = $row['name'];
$location = $row['location'];
$feedback = $row['feedback'];
echo "
<p>Name: $name, Location: $location, Feedback: $feedback.</p>
";
但是,这只显示了两个。它不会一直显示新的,它只是显示第一个然后是第二个然后停止。
我做错了什么?谢谢:)
【问题讨论】:
【参考方案1】:您可以尝试 setInterval() 代替:
var i = setInterval(function()
//Call ajax here
,10000)
【讨论】:
【参考方案2】:你想要setInterval()
吗?
setInterval(function()get_fb();, 10000);
或者:
setInterval(get_fb, 10000);
或者,如果您希望它仅在成功完成调用后运行,您可以在您的 .ajax().success()
回调中进行设置:
function get_fb()
var feedback = $.ajax(
type: "POST",
url: "feedback.php",
async: false
).success(function()
setTimeout(function()get_fb();, 10000);
).responseText;
$('div.feedback-box').html(feedback);
如果您希望它运行而不管结果如何,请使用.ajax().complete()
:
function get_fb()
var feedback = $.ajax(
type: "POST",
url: "feedback.php",
async: false
).complete(function()
setTimeout(function()get_fb();, 10000);
).responseText;
$('div.feedback-box').html(feedback);
这是两者的演示。请注意,成功只工作一次,因为 jsfiddle 在 ajax 调用中返回 404 错误。
http://jsfiddle.net/YXMPn/
【讨论】:
我注意到我已经删除了代码的.responseText
部分,这会破坏功能。查看我的上一次编辑。
刚刚回到我的这个项目。这个适合使用吗?我的意思是它会对服务器造成压力吗?该网站只是一家电气公司,规模并不大。 ://
如果每十秒一次,只有在最后一个用户完成后,并且您的用户群相对较小(
考虑到如果你把它放在你的成功回调中,它每次都会复制。如果它是一个函数,那不是正确的方法。
一旦我使用 setInterval 进行 ajax 间隔 5 秒,让页面连续打开 6 小时,整个浏览器都挂起,CPU 使用率一直是 23+%(几乎一个核心在 100% 之后它在双核超线程 CPU 上)。看起来 setInterval 会导致某种 cpu/内存泄漏,并且如果您的客户长时间观看您的网页,他们会非常不可靠。【参考方案3】:
setInterval(function()
$.ajax(
type:"post",
url:"myurl.html",
datatype:"html",
success:function(data)
//do something with response data
);
, 10000);//time in milliseconds
【讨论】:
@Muhammed - 您在 url 属性上有一个未对齐的双引号。 @Jared 感谢提及和@Maerlyn 感谢更正 当前页面有很多jquery函数和数据的时候加这段代码好不好 最好使用setTimeout。无论之前的调用是否仍在运行,SetInterval 都会访问服务器。【参考方案4】:这对我有用
setInterval(ajax_query, 10000);
function ajax_query()
//Call ajax here
【讨论】:
以上是关于jQuery - 每 10 秒调用一次 ajax的主要内容,如果未能解决你的问题,请参考以下文章
在 jQuery 中每 5 秒调用一次函数的最简单方法是啥? [复制]