如何使用JavaScript将数据发送到具有特定ID的元素?

时间:2013-08-14 03:08:19

标签: javascript rgraph

我正在使用WebSockets接收需要发送到两个不同canvas es的数据包,其中包含名为magnitude1magnitude2的ID。在这些canvas es上绘制了图表,我希望定期用新数据刷新图表。但是,当我调用将数据发送到正确元素的函数时,我的控制台会显示数据已发送到magnitude1一次,magnitude2一次,然后数据才会发送到{{1}用于刷新。这是我的代码:

magnitude1

更多细节:我希望通过套接字将数据包作为浮点数存储并存储在dataCollector.onmessage = function(evt) { console.log("onmessage is being called"); var realData = new Float32Array(evt.data); //data is expected in the format [nodeID,(256 floats)] setInterval(function(){readMagPacket(realData);},1000); } function readMagPacket(theGoods) { var nodeID = theGoods[0]; console.log("The node ID is " + nodeID); var magnitude = new Array(); for(var i = 1; i < theGoods.length; i++) { magnitude[i-1] = theGoods[i]; } console.log("The length of packet " + nodeID + " is " + magnitude.length); graphMagnitude(magnitude,nodeY,freqRange); Mag(magnitude,nodeID,freqRange); } function Mag(magnitude,index,freqRange) { console.log("Mag is called"); var magPlot = new RGraph.Bar('magnitude'+index,magnitude); magPlot.Set('labels',freqRange); magPlot.Set('gutter.left',100); magPlot.Set('gutter.bottom',40); magPlot.Set('ymax',.01); magPlot.Set('ymin',0); magPlot.Set('backgroun.grid',true); magPlot.Set('numyticks',2); magPlot.Set('title','Magnitude of Channel ' + index); magPlot.Set('title.yaxis','Magnitude (dB)'); magPlot.Set('title.xaxis','Frequency (MHz)'); magPlot.Set('title.xaxis.pos',.2); magPlot.Set('title.yaxis.pos',.5); magPlot.Set('background.color','white'); magPlot.Set('colors',['green']); magPlot.Set('hmargin',.00001); magPlot.Draw(); } 中。我想将此传递给一个函数,该函数将realData(数据包中的第一个数字)与其余数据分开。我将使用它来确定将数据发送到哪个nodeID。在canvas行中,我将var magPlot = new RGraph.Bar('magnitude'+index,magnitude);作为nodeID传递。构造函数中标有index的部分应该确定我想要创建图表的'magnitude' + index的{​​{1}}。我认为这就是错误所在。我希望能够通过合并idcanvassetInterval来刷新两个图表,但它似乎只是刷新readMagPacket。当我查看我的控制台以查看发生了什么时,我看到所有数据包都先被发送,然后Mag被调用。理想情况下,我希望在每个通过的数据包上调用magnitude1。有没有办法修复代码来实现这一目标?

1 个答案:

答案 0 :(得分:1)

当每个数据包到达时,您使用相同的数据重复调用readMagPacket。我相信如果你删除setInterval调用它会按你的意愿工作,并直接调用readMagPacket。