Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用setInterval()每30秒更新一次时间戳_Javascript_Jquery_Setinterval - Fatal编程技术网

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);