【发布时间】:2013-02-16 08:02:22
【问题描述】:
我希望能够像经过的时间一样更新页面上所有 cmets 的时间值。
我知道我应该使用setInterval() 运行脚本,或者可能使用长轮询,不知道这是否是首选技术。
此外,即使我在 JS 响应中获得了所有 cmets 的更新值(可能在一个数组中),我应该如何将这些值分配给相关的 cmets。
如果我应该使用其他一些逻辑,请提出建议并提供帮助。
我认为它或多或少类似于推送通知功能。
*编辑:* 因为这已经被否决了,而且我现在已经发布了这个问题,如果人们能给我一些建议,我将不胜感激..
更新:我通过在JavaScript中重新创建计算经过时间的PHP函数来实现上述功能,如下所示:
function calcTime(date){
if(date == ""){
return "No date provided";
}
periods = new Array("second", "minute", "hour", "day", "week", "month", "year", "decade");
lengths = new Array("60","60","24","7","4.35","12","10");
now = Math.round(new Date().getTime() / 1000);
unix_date = date;
// check validity of date
if(unix_date == ""){
return "bad date";
}
// future date or past date
if(now > unix_date){
difference = now - unix_date;
tense = "ago";
} else {
difference = unix_date - now;
tense = "from now";
}
for(var j=0;difference >= lengths[j] && j < (lengths.length) - 1; j++){
difference /= lengths[j];
}
difference = Math.round(difference);
if(difference != 1){
periods[j] += "s";
}
return difference+" "+periods[j]+" "+tense ;
}
在HTML中从数据库中返回一个带有时间戳的隐藏值,然后在JS中循环使用setInterval()函数获取新值,从而消除了调用php和不必要的ajax请求的需要。像这样:
(function(){
setInterval(function (){
timeValues = document.getElementsByClassName('unixTime');
abbrValues = document.getElementsByClassName('full_timestamp');
len = timeValues.length;
alen = abbrValues.length;
for(i=0; i<len;i++){
ut = timeValues[i].value;
for(j=0;j<alen;j++){
abbrValues[i].innerHTML = calcTime(ut);
}
}
},10000);
})();
感谢所有试图提供帮助的人,感谢版主重新提出这个问题。
【问题讨论】:
-
完全否决?我只需要为所有 cmets 分配正确值的逻辑。
-
我相信你被否决了,因为你没有尝试任何东西,只是期待“免费代码”。
-
我感觉到你没有阅读我上面的评论。请把它放在心上..先尝试一下,你会有更好的反应。
-
@Daedalus 是你建议我删除这个并做一些研究,如果我有问题回来再发布一个
-
删除?也许,但这不是我的建议。我的建议是先尝试一些东西,然后相应地编辑你的问题。不仅如此,你的问题就目前而言相当模糊。当我们不知道您的目标是什么时,很难为您提供适合您需求的代码。
标签: javascript real-time