2010-12-13 76 views
1

Pour une raison quelconque, j'ai cet énorme pet de cerveau aujourd'hui. >. <Quelle est une meilleure façon de réécrire ce fichier JSON en données jQuery()?

J'ai une des données JSON que je joins à l'utilisation de jQuery .data() qui ressemble à ceci:

$.getJSON("names.php", function(data) { 
    //generate html string and append to DOM 
    $.each(data, function(i,item) { 
     var strHtml; 
     strHtml += '<img src="' +item.PIC + '.jpg" id="' + item.ID + '" />'; 
    }) 
    $('body').html(strHtml); 

    //attach data to image ID 
    $.each(data, function(i,item) { 
     $('#' + item.ID).data(item.ID, { 
      NAME: item.NAME, 
      PHONE: item.PHONE, 
      EMAIL: item.EMAIL, 
      ADDRESS: item.ADDRESS, 
      ... 
      ... 
      ... 
     }); 
    } 
} 

Cela fonctionne bien; cependant, il semble un peu laid et je suis en train de nettoyer un peu surtout sur cette partie:

$.each(data, function(i,item) { 
     $('#' + item.ID).data(item.ID, { 
      NAME: item.NAME, 
      PHONE: item.PHONE, 
      EMAIL: item.EMAIL, 
      ADDRESS: item.ADDRESS, 
      ... 
      ... 
      ... 
     }); 
    } 

J'ajoute un tableau d'objet à la valeur de clé. Exemple de http://api.jquery.com/data/ $ ('body'). Data ('bar', {myType: 'test', nombre: 40});

Voici ma tentative de réécrire:

$.each(data, function(i,item) { 
    $('#' + item.ID).data(item.ID, function(){ 
     $.each(item) { 
      return i + ':' item[i]; 
     } 
    }) 
} 

est-il un moyen plus propre d'écrire cela? J'ai aussi essayé $ ('#' + item.ID) .data (item.ID, JSON.stringify (data));

Répondre

2

Si vous voulez juste l'article complet ajouté, avec toutes ses propriétés, il vous suffit de le faire:

$.each(data, function(i,item) { 
    $('#' + item.ID).data(item.ID, item); 
}); 

.data() prend toute valeur, y compris un objet, vous pourriez aussi bien utiliser l'original. , Il est plus probable que vous voulez aussi ceci:

$.each(data, function(i, item) { 
    $('#' + item.ID).data("someKey", item); 
}); 

Ensuite, vous pouvez utiliser une .data("someKey") cohérente pour récupérer les données comme bien, plutôt que d'utiliser son propre .id comme la clé de données et l'élément.

+0

C'est ce que je dois .data (clé, obj) et je ne pensais .data (clé, valeur) uniquement. – nolabel

+0

@nolabel - vous devriez être tous ensemble avec cette approche, beaucoup plus simple aussi :) –

+0

Merci Nick! Chaque clé doit être unique dans mon cas. B/c Je dois appeler les données par rapport à son identifiant. – nolabel

1

Vous pouvez juste faire:

$('#' + item.ID).data(item.ID, item); 

Vous serez toujours en mesure d'accéder aux valeurs comme prévu:

$('#' + someId).data(someId).NAME; 

Par ailleurs, JSON.stringify est pas une bonne idée parce que pour lire à nouveau les valeurs, vous devrez le convertir d'une chaîne en un objet.

+0

Merci pour le conseil! Je vais garder à l'esprit JSON.stringify en ce qui concerne la nécessité de les reconvertir. – nolabel

1

Essayez:

$('#' + item.ID).data("info", item);