所以,我正在尝试从数组中提取两个不同的数组值chanArrId& chanArrName via express(socket.io)&的node.js。
然后我将它们显示在同一行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。
以下是最新的代码一直在调整,以了解ave一直试图完成的事情。
客户端
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 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;
}
希望你们能给我一些指导。
答案 0 :(得分:1)
在客户端代码中,您有一个嵌套的for循环,其索引变量与外循环相同,这意味着外部循环不会按预期运行多次。
此外,+=
运算符会将新值连接到以前的值,并解释您注意到的连接通道ID。您已经逐步扩展了DOM节点,因此无需使用+=
。只需分配。对于外部循环也是如此:只需使用sipname
分配给=
。
正确缩进代码也可能有助于调试它。
最后,使用var
声明您的索引变量。
通过这些更正,您可以得到:
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,然后最终将其包装在TR
标记中并将其附加到$sipname
。我对变量$sipname
没有看法,所以我认为它设置正确。
有一件事你当然需要解决:
代码设置生成节点的id
属性的值,但始终是相同的。这在HTML中是不可接受的:文档中的id应该是唯一的。
答案 1 :(得分:0)
这就是我最终设法解决的问题:
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>');
}
}
});
因为我在服务器端同时处理这两个数组,以及每次将它们拉出到网页时都是如何直接相关的我只是E.G Channel.name&amp; Channel.id
我刚开始调用值和sipname,因为它们每次都会有相同的值集,同时也会被添加或删除。
希望这是有道理的。
对于那些想要替代解决方案的人来说,这就是我最终的工作方式。