NodeJS Socket.IO:indexOf无效

时间:2014-02-10 23:32:12

标签: javascript node.js indexof socket.io

我试图理解为什么我的indexOf无效!实际上,每次用户加载网站页面时,服务器都会收到包含一个(当前)值的变量“data”:用户名。

client.js:

$.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 = {};

请帮助我,我会杀了某人!

2 个答案:

答案 0 :(得分:0)

connected.push(JSON.stringify(usersInfos))
…
connected.indexOf(data.name) == -1

如果您在connected数组上推送JSON字符串,则无法在其中找到唯一的.name。希望能救一个直播: - )

答案 1 :(得分:0)

我通过编写多维对象函数解决了我的问题!

这是功能:

/** 
 * 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é");
            }
        }
    });