2014-02-10 4 views
0

왜 내 indexOf가 작동하지 않는지 이해하려고합니다! 사실, 사용자가 웹 사이트의 페이지를로드 할 때마다 서버는 하나의 (잠시 동안) 값인 사용자의 이름 인 변수 "data"를 수신합니다.NodeJS Socket.IO : indexOf가 작동하지 않습니다.

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는 만 완료됩니다 ... 그는 페이지를로드하거나 새로 고침 할 때마다 사용자를 푸시합니다.

다음은 연결되어 있고 사용자 정보가 신고 된 방법입니다.

var connected = []; 
var usersInfos = {}; 

제발 도와주세요, 누군가 죽일 것입니다!

답변

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

당신이 connected 배열에 JSON 문자열을 추진하는 경우, 당신은 거기에 유일한 .name을 찾을 수 없습니다. 희망을 라이브로 저장 :-)

+0

죄송합니다 ! 나는 이해하지 못했다 ... 사실 데이터는 "var.Data = JSON.parse (data)"로 분석되므로 "connected.indexOf (data.name)"에서 "connected"는 구문 분석되고 "data"도된다! –

+0

예,'data'는 파싱 된 객체입니다 만,'JSON.stringify (usersInfos)'는 분명히 아닙니다. – Bergi

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+'"}'); 

을 I 않는 : 지연에 대한

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é"); 
      } 
     } 
    }); 
관련 문제