2012-06-13 6 views
0

J'essaie d'accéder aux valeurs d'un objet à partir d'une fonction que j'ai créée avec un rappel, mais j'ai rencontré des problèmes. Je suis encore relativement nouveau sur jQuery/javascript.jQuery accéder aux objets

J'appelle la fonction comme suit:

siteDeps(id,function(data){ 
    $.each(data,function(key,val) { 
     console.log(key); 
     console.log(val); 
    }); 
}); 

La fonction est exécutée 5 requêtes ajax à partir de données XML et renvoie des données comme un objet multidimensionnel; voici un extrait montrant la viande de celui-ci:

function siteDeps(id,callback) { 
    var result = { 
     sitecontactid : {}, 
     siteaddressid : {}, 
     sitephoneid : {}, 
     contactaddressid : {}, 
     contactphoneid : {} 
    }; 

...//.... 

    var url5 = decodeURIComponent("sql2xml.php?query=xxxxxxxxxxx");    
    $.get(url5, function(data){ 
     $(data).find('ID').each(function(i){ 
      result.sitephoneid[i] = $(this).text(); 
     }); 
    }); 
    callback(result); 
} 

La sortie console.log montre ceci:

sitecontactid 
Object 
    0: "2" 
    1: "3" 
    __proto__: Object 
siteaddressid 
Object 
    0: "1" 
    __proto__: Object 
sitephoneid 
Object 
    0: "1" 
    1: "5" 
    2: "54" 
    __proto__: Object 
contactaddressid 
Object 
    0: "80" 
    __proto__: Object 
contactphoneid 
Object 
    0: "6" 
    __proto__: Object 

Comment puis-je extraire les données de rappel dans un format que je peux utiliser, par exemple sitephoneid: "1", "5", "54"

Ou existe-t-il un moyen meilleur/plus simple de le faire?

Merci d'avance.

+0

Quel est le problème avec le format actuel? Dans la plupart des cas, un objet est le format le plus pratique pour travailler. – Christophe

+0

@Christophe. La raison de la demande est que je ne peux pas physiquement sembler accéder à la deuxième dimension de l'objet. Ces résultats doivent être réinjectés dans un autre appel ajax. – Mawdryn

+0

Par exemple result.sitephoneid ["1"] devrait retourner "5", est-ce que vous voulez dire par seconde dimension? – Christophe

Répondre

0

Pour obtenir cette sortie, vous pouvez utiliser le Javascript "join" fonction:

siteDeps(id, function(data){ 
    console.log(JSON.stringify(data)); 

    var values = []; 
    for (var prop in data.sitephoneid) { 
     values.push(data.sitephoneid[prop]) 
    } 
    var str = '"' + values.join('","') + '"'; 
    console.log(str); 
    // output: "1","5","54" 
}); 

function siteDeps(id,callback) { 
    var result = { 
     sitecontactid : {}, 
     siteaddressid : {}, 
     sitephoneid : {}, 
     contactaddressid : {}, 
     contactphoneid : {} 
    }; 

...//.... 

    var url5 = decodeURIComponent("sql2xml.php?query=xxxxxxxxxxx");    
    $.get(url5, function(data){ 
     $(data).find('ID').each(function(i){ 
      result.sitephoneid[i] = $(this).text(); 
     }); 

     // callback needs to go inside the ajax call, because it's asynchronous 
     callback(result); 
    }); 
} 
+0

merci pour la réponse rapide, malheureusement, je peux obtenir que ça marche ... arrive avec ncaught TypeError: Impossible d'appeler la méthode 'join' de – Mawdryn

+0

même pas 'console.log (data.sitephoneid);' donne 'undefined' – Mawdryn

+1

@ user1275268 désolé à ce sujet. Je pensais * sitephoneid * était un tableau, mais c'est en fait une carte de la propriété. Voir ma réponse mise à jour. – McGarnagle

Questions connexes