来自不同数组的不同值并在一个表中彼此相邻

所以,我正试图通过express(socket.io)&node.js从数组chanArrId&chanArrName中取出两个不同的数组值。

那么一旦我把它们放在同一排的一张桌子上E:G

<tr class="exe"> <td>SIP/487-00000060</td> <td>0000000001</td> </tr> <tr class="exe"> <td>SIP/488-00000060</td> <td>0000000002</td> </tr> 

然后为下一个集合取一个新的行,为以下通道值做同样的操作。

当我添加另一个拉下两个没有重复自己。 我已经有了某种成功,但总是落后于一个错误的定位或重复的价值观。

我有一个价值,但不是两个都工作得很好:

呼叫分机488:将频道名称和值添加到数组中的页面

工作的第一个工作正常,如在顶部看到它的工作盛大然后我得到以下时,我添加了第二对值:

 <tr class="exe" id="exe"> <td>SIP/487-00000060</td> <td>1445964898.228</td> <td>1445964898.2281445964900.229</td> </tr> 

它跳过SIP名称,然后在下一行添加两个通道ID。

下面是最新的代码已经调整,看看已经试图完成。

客户端

 socket.on('sipname', function (data,datad) { var sipname = ''; var sipid = ''; $(".exe").remove(); for (i = 0; i < data.length; i++) { sipname += data[i]; if (sipname) { $sipname.append('<tr class="exe" id="exe">\ <td id="siptd">' + sipname + '</td>'); } for (i = 0; i < datad.length; i++) { sipid += datad[i]; if (sipid) { $('#sipTable td:last').after('<td>' + sipid + '</td></tr>'); } } sipid = ''; } }); 

服务器端function

  function updateSip() { io.sockets.emit('sipname', chanArrName,chanArrId); chandump(); } 

停滞:将数值推入数组的位置

  bridge.addChannel({ channel : channel.id }, function (err) { var name = chanArrName.push(channel.name) var id = chanArrId.push(channel.id) updateSip(); if (err) { throw err; } 

希望你们能给我一点指导。

在客户端代码中,您有一个与外部循环具有相同索引variables的嵌套for循环,这意味着外部循环不会像预期的那样运行多次。

另外, +=运算符会将新值连接到先前的值,解释您注意到的连接的通道ID。 您已经逐步扩展了DOM,因此不需要使用+= 。 只需分配。 对于外部循环也是一样:只要用=赋值给sipname

正确缩进您的代码也可能有助于debugging它。

最后,用var声明你的索引variables。

有了这些更正,你会得到这个:

 socket.on('sipname', function (data, datad) { var sipname, sipid, dataHtml; $(".exe").remove(); for (var i = 0; i < data.length; i++) { sipname = data[i]; if (sipname) { dataHtml = '<td id="siptd">' + sipname + '</td>'; for (var j = 0; j < datad.length; j++) { sipid = datad[j]; if (sipid) { dataHtml += '<td>' + sipid + '</td>'; } } $sipname.append('<tr class="exe" id="exe">' + dataHtml + '</tr>'); } } }); 

编辑:

以上代码在评论后更新。 这个版本将每个TD的HTML链接到一个variables中,然后把它包装在一个TR标签中,并将其附加到$sipname 。 我没有对variables$sipname ,所以我假设它设置正确。

有一件事你当然需要解决:

代码为生成的节点的id属性设置值,但始终是相同的。 这在HTML中是不可接受的:一个id在文档中应该是唯一的。

这就是我最终设法解决的问题:

 socket.on('sipname', function (data, datad) { var sipname = ''; var sipid = ''; $('.exe').remove(); for (var i = 0; i < data.length; i++) { sipname = data[i]; sipid = datad[i]; if (sipname) { $sip.html('<tr class="exe">\ <td class="sipid">' + sipid + '</td>\ <td class="sipname">' + sipname + '</td>\ <td><button class="btn btn-default mute" id="mute" type="submit"><span>Mute</span></button></td>\ <td><button class="btn btn-default kick" id="kick" type="submit">Kick</button></td>\ </tr>'); } } }); 

因为我在服务器端同时处理这两个数组,并且每次将它们拉出到网页中时都是直接相关的,所以我简单地通过EG Channel.name&Channel.id

我只是开始与sipname一起调用这个值,因为它们每次都有相同的一组值,同时也被添加或删除。

希望这是有道理的。

对于那些想要替代解决scheme的人来说,这就是我最后的工作方式。