【发布时间】:2016-06-23 14:07:59
【问题描述】:
我正在尝试让选择不同的 SSID 来切换您从浏览器连接到的 Wlan。
var sys = require('sys');
var exec = require('child_process').exec;
app.get(prefix + '/wlan', function(req, res){
child = exec("iwlist wlan0 scan | grep ESSID", function(error, stdout, stderr){
if(error !== null){
console.log('Exec error ' + error);
}
else {
res.send(stdout);
}
});
});
这是我目前获取 SSID 列表的代码..
输出是这样的:
ESSID:"WLAN-GUEST" ESSID:"WLAN1" ESSID:"WLAN-GUEST" ESSID:"WLAN1" ESSID:"WLAN2"我不知道为什么两个 ESSID 会被列出两次,但我的主要问题是,如何将其解析为 JSON,或者如何像数组 (wlanlist[0]) 一样访问每个条目?
编辑: 我试图 stdout.replace(" ",", ");和 JSON.parse 但由于它是异步的,因此它在发送时没有更改。 (不确定这是否可以作为同步)
Edit2:试图访问这样的数据:
$(document).ready(function() {
$.get(prefix + '/wlan', function(wlanlist){
document.getElementById("wlanoptions").options[0] = new Option("Select your WLAN:","");
document.getElementById("wlanoptions").options[1] = new Option(wlanlist[0],wlanlist[0])
});
});
最终结果:
var wlanlistarray = stdout.split("ESSID:");
res.send(wlanlistarray);
另外:
//extract ssid and remove quotes
var wlanlist = new Array;
var step1 = stdout.split("ESSID:");
for(i = 1; i < step1.length; i++){
var arr = new Array;
arr = step1[i].split('"');
//if exists in array -> continue; else create new entry in wlanlist
if(wlanlist.indexOf(arr[1]) === -1){wlanlist.push(arr[1]);}
else{continue;}
}
res.send(wlanlist);
【问题讨论】:
-
它们可能被列出两次,因为两个路由器广播相同的 SSID。也许是中继器。
-
啊,这可能是真的,谢谢。
-
我在这里有点困惑。这看起来像 node.js 代码,但您说您正在浏览器中运行它。你真的在浏览器中运行它吗?
-
也是你传递给 exec 调用的命令,不应该是字符串吗?
-
是的,它是 node.js 代码,它是服务器端的,由 ajax 请求访问,以创建具有 SSID 的动态选择框。我是新手,不确定我是否做对了。是的,它是一个字符串,不知何故忘记复制它。已编辑,谢谢。
标签: javascript arrays json node.js ssid