Javascript NodeJS Socket.IO:indexOf不工作
我正在努力理解为什么我的索引不起作用!实际上,每次用户加载网站页面时,服务器都会收到变量“data”,该变量包含一个值(就目前而言):用户名 client.js:Javascript NodeJS Socket.IO:indexOf不工作,javascript,node.js,indexof,socket.io,Javascript,Node.js,Indexof,Socket.io,我正在努力理解为什么我的索引不起作用!实际上,每次用户加载网站页面时,服务器都会收到变量“data”,该变量包含一个值(就目前而言):用户名 client.js: $.ajax({ type: "POST", url: "ajax.php", data: { ajaxRequest: "userInfos" }, success: function(data){ var data = JSON.parse(data);
$.ajax({
type: "POST",
url: "ajax.php",
data: {
ajaxRequest: "userInfos"
},
success: function(data){
var data = JSON.parse(data);
var userInfos = {
name: data.username,
}
socket.emit('pong',JSON.stringify(userInfos));
}
});
server.js:
client.on('pong',function(data){
var data = JSON.parse(data);
if(data.name != null) { // On s'assure qu'il est connecté
/** VARIABLES SESSION **/
client.set("name",data.name);
client.set("id",client.id);
/** VARIABLES SESSION **/
if(connected.indexOf(data.name) == -1){ // Si il n'est pas dans le tableau
var usersInfos = {
name: data.name,
id: client.id
};
io.sockets.emit('pong',JSON.stringify(usersInfos));
connected.push(JSON.stringify(usersInfos)); // On remet son pseudo
console.log("[PONG] "+data.name+" ("+client.id+") est connecté");
}
}
});
因此,只有当用户在对象中不存在,但实际上不工作时,usersInfos才会完成。。。每次页面加载或刷新后,他都会推送用户
以下是如何声明connected和usersInfos:
var connected = [];
var usersInfos = {};
请帮帮我,我会杀人的
如果在连接的
数组上推送JSON字符串,则无法在其中找到唯一的.name
。希望已经保存了一个活的:-)我通过编写多维对象函数解决了我的问题
以下是函数:
/**
* Création d'un tableau d'objets multidimensionnel
*/
function mdimAdd(arrayName,values) {
// On vérifie si l'array est déjà un objet ou non.
if(typeof(arrayName) == "object") {
arrayName = JSON.stringify(arrayName); // Si oui, on la transforme en string
}
arrayName = arrayName.slice(0,-1); // On supprime le dernier caractère
if(S(arrayName).endsWith("}")) {
arrayName = arrayName+",";
}
arrayName = arrayName+""+values; // On rajoute les valeures
arrayName = arrayName+"}"; // On ferme l'objet
return JSON.parse(arrayName); // On retourne le tableau sous forme d'objet JSON
}
下面是创建多维对象的行:
usersInfos = mdimAdd(usersInfos,'"'+data.name+'": {"name": "'+data.name+'","id": "'+client.id+'"}');
那么现在我要做的是:
client.on('pong',function(data){
data = JSON.parse(data);
if(data.name != null) { // On s'assure qu'il est connecté
/** VARIABLES SESSION **/
client.set("name",data.name);
client.set("id",client.id);
/** VARIABLES SESSION **/
if(!usersInfos[data.name]){ // Si il n'est pas dans le tableau
usersInfos = mdimAdd(usersInfos,'"'+data.name+'": {"name": "'+data.name+'","id": "'+client.id+'"}');
console.log("[PONG] "+data.name+" ("+client.id+") est connecté");
}
}
});
抱歉耽搁了!我不明白。。。实际上,数据是“var data=JSON.parse(data)”解析的,所以在“connected.indexOf(data.name)”中,“connected”和“data”也是解析的!是的,data
是一个已解析的对象,但是JSON.stringify(usersInfos)
显然不是。
client.on('pong',function(data){
data = JSON.parse(data);
if(data.name != null) { // On s'assure qu'il est connecté
/** VARIABLES SESSION **/
client.set("name",data.name);
client.set("id",client.id);
/** VARIABLES SESSION **/
if(!usersInfos[data.name]){ // Si il n'est pas dans le tableau
usersInfos = mdimAdd(usersInfos,'"'+data.name+'": {"name": "'+data.name+'","id": "'+client.id+'"}');
console.log("[PONG] "+data.name+" ("+client.id+") est connecté");
}
}
});