Javascript 使用setInterval()每30秒更新一次时间戳
我有一个这样的帖子列表:Javascript 使用setInterval()每30秒更新一次时间戳,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我有一个这样的帖子列表: <ul> <li> <p class="post" id="432">This is a post</p> <p class="timestamp">5 minutes ago</p> </li> <li> <p class="post" id="589">This is another post
<ul>
<li>
<p class="post" id="432">This is a post</p>
<p class="timestamp">5 minutes ago</p>
</li>
<li>
<p class="post" id="589">This is another post on the site</p>
<p class="timestamp">1 hour ago</p>
</li>
</ul>
显然,我的.ajax()函数有问题,或者我根本不应该使用ajax()。如果您只想显示“很久以前”为什么要使用ajax?只需使用这个插件,这并不是你问题的答案,但。。。另一种方法是将时间戳添加到属性中,这意味着您可以同时避免ajax调用,例如:
<ul>
<li>
<p class="post" id="432">This is a post</p>
<p class="timestamp" data-timestamp="1313649170147">5 minutes ago</p>
</li>
<li>
<p class="post" id="589">This is another post on the site</p>
<p class="timestamp" data-timestamp="1313649189299">1 hour ago</p>
</li>
</ul>
有关prettyDate的实现,请参见
然后将updateDateTimestamps
传递到setInterval
:
setInterval(updateDateTimestamps, 30000);
从:
上下文此对象将成为所有Ajax相关回调的上下文。默认情况下,上下文是表示调用中使用的ajax设置的对象(
$.ajaxSettings
与传递给$.ajax
的设置合并)
因此,成功回调中的这个
本质上就是AJAX选项。因此,请指定正确的上下文
选项,以获取所需的此
,或者使用显式选择器:
success : function(data){
$('.timestamp').html(data);
setTimeout(update_timestamps, 30000);
}
如果出现错误,您可能需要添加一个error
回调来重新启动计时器。或者使用complete
回调:
success: function(data) {
$('.timestamp').html(data);
},
complete: function() {
setTimeout(update_timestamps, 30000);
}
即使如此,
.timestamp
匹配回调中的多个内容仍然存在问题,因此需要调整整个方法(即.timestamp
元素上的id
属性和返回数据中的id到timestamp映射)。或者干脆放弃AJAX,听听naveen的意见。您的AJAX功能本身没有什么问题。您只是调用了setInterval
错误:
setInterval(update_timestamps, 30000);
(请注意更新_时间戳的函数引用,而不是函数调用)
如果你认真思考,你会发现为什么你所做的不起作用(提示:你正在将
未定义的传递给setInterval)。那么它目前在做什么?现在,没有任何更新。你对setInterval
的调用中可能有boo-boo。看起来您传递的是update\u timestamps
的返回值,而不是对函数的引用。我想您应该这样做:setInterval(更新时间戳,30000)代码>。我认为这种方法需要彻底重新思考。我只是不知道最好的做法是什么。谢谢。我原以为声明中的这个出了什么问题,但我无法指出。@melee:仍然存在唯一性问题。
(请参阅我的更新),我本来打算删除这个,但我把它带回来了,注意到了你将面临的下一个问题,并告诉你要注意naveen。我不是OP,只是一个试图帮助人们的javascript爱好者,但为时已晚:P@melee当前位置我也起得太晚了:)同时尝试做太多的事情,其中一件事情应该是睡觉。逻辑错误。这最终会使浏览器崩溃。如果它为每个元素调用update_时间戳,它最终将无限期地运行函数。+1表示ajax在这种情况下毫无意义:)
success: function(data) {
$('.timestamp').html(data);
},
complete: function() {
setTimeout(update_timestamps, 30000);
}
setInterval(update_timestamps, 30000);