数组输出时新增而非覆盖数据,PHP定时拉取活动信息追加问题排查
问题原因
每次查询接口返回新数据后,你直接调用l.appendChild(s)把新的活动行追加到了表格尾部,没有提前清空上一次查询渲染的旧内容,所以每5分钟就会重复新增一次相同的活动条目,和数组处理逻辑无关。
修复方案
只需要在遍历新数据生成表格行之前,清空表格tbody的原有内容即可,不会影响你原有的5分钟轮询逻辑。
找到代码中的这一行:
var o,a=Math.floor(window.innerHeight/window.innerWidth*9),l=document.getElementById("event-table-body"),c="#000000",r=1/((r=Object.keys(t).length)<=a?r:a),d=0;
在该行下方新增一行清空tbody内容的代码:
l.innerHTML = '';
修改后的完整核心代码段
function init_event(){ $.ajax({ url:"php/event-query.php", data:{activeId:SETTING_DATA.facility}, success:function(e){ var t=JSON.parse(e),n=Date.now()/1e3|0; if(!SETTING_DATA.show_passed_events) for(var i in t) t.hasOwnProperty(i)&&n>t[i].time_to&&delete t[i]; if($.isEmptyObject(t)){ $("#event-text").css("display","block"),$("#event-table").css("display","none"); }else{ $("#event-text").css("display","none"),$("#event-table").css("display","table"); var o,a=Math.floor(window.innerHeight/window.innerWidth*9),l=document.getElementById("event-table-body"),c="#000000",r=1/((r=Object.keys(t).length)<=a?r:a),d=0; // 新增:清空旧的表格内容 l.innerHTML = ''; for(o in t) if(t.hasOwnProperty(o)){ var s=document.createElement("tr"), m=t[o].time_from,u=t[o].time_to,_=document.createElement("td"); _.appendChild(document.createTextNode(format_time(m,u))),s.appendChild(_); _=document.createElement("td"); if(_.appendChild(document.createTextNode(t[o].name)),s.appendChild(_),s.style.color=c,s.style.color=m<n&&n<u&&SETTING_DATA.highlight_current?"#4da6ff":c,l.appendChild(s),c=shadeColour(c,r*++d/1.5-.1),d==a)break } } } }) setTimeout(function(){ init_event() },3e5) }
内容的提问来源于stack exchange,提问作者Grammy
相关产品推荐
相关产品推荐

