2010-10-28 4 views
0

Salut tout le monde J'essaie de lire quelques json et faire 2 choses. Insérez une partie des données json dans une UL. La deuxième chose est de créer une fonction qui peut être appelée à partir d'une balise d'ancrage et affiche les autres données. Laissez-moi essayer d'expliquer avec mon code.lecture json de jquery

Mon JSON ressemble à ceci

[{lakeName:"Lake 1",lakeCode:"111",Readings[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]}{lakeName:"Lake 2",lakeCode:"222",Readings[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]}] 

Je suis en train de remplir ma liste comme celle

$(document).ready(function() { 
     $.ajax({ 
      url: "http://theaboveJSONisreturnedFromMyUrl", 
      method: 'GET', 
      dataType: 'json', 
      success: onDataReceived 
     }); 



     var data = []; 

     function onDataReceived(series) { 

      data = [series]; 
      $(data).each(function (i, data) { 
       $('#myList').append("<li>" + "<a href=\"javascript:GetLake(" + data.lakeCode + ");\">" + data.lakeName + "</a></li>"); 
      }); 

     } 
    }); 

      function GetLake(lake) { 

      alert('some how get the readings for the clicked lake code e.g. lakeCode 111 and display them here ["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5]); 

      } 

Maintenant, je vois des valeurs dans les données mais je ne peux pas accéder au semble par exemple data.lakeCode

Qu'ai-je fait de mal?

Toute aide serait géniale !!!

+0

À première vue, je suppose que vous avez une erreur de syntaxe dans votre JSON. Je pense qu'un ':' est manquant après 'Readings'. Cela peut ou peut ne pas être le problème entier. – Thomas

+0

Aussi 'data = [série];' fait de 'series' le seul élément du tableau' data'. Vous essayez ensuite d'itérer sur le tableau en utilisant '$ .each'. Ceci est identique à travailler directement sur 'series'. – lonesomeday

Répondre

0

Il existe plusieurs erreurs de syntaxe dans votre fichier JSON. Il devrait ressembler à ceci:

[{lakeName:"Lake 1",lakeCode:"111",Readings:[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5]]},{lakeName:"Lake 2",lakeCode:"222",Readings:[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5]]}] 

Certains : et , ont été portés disparus, , inutiles entre les deux et un ] était inutile à la fin.

+0

Cool. Je vais essayer de faire trier la syntaxe json. J'espère que cela aidera. J'ai supprimé data = [série] mais series.lakeCode n'est toujours pas défini. –

0

Pour être valide, votre JSON a besoin les modifications suivantes (you can check always validity with JSONLint here):

  • Commas entre les objets du tableau principal
  • Aucune commande de fuite dans les tableaux Readings
  • guillemets autour des noms de membres
  • : entre Readings et sa valeur

Dans l'ensemble, il devrait ressembler à ceci:

[{"lakeName":"Lake 1","lakeCode":"111","Readings":[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5] ]},{"lakeName":"Lake 2","lakeCode":"222","Readings":[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5] ]}] 
//compared to your current version: 
[{ lakeName :"Lake 1", lakeCode :"111", Readings [["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]} { lakeName :"Lake 2", lakeCode :"222", Readings [["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]}] 

En outre, vous devez utiliser $.each() ici au lieu, comme ceci:

$.each(data, function() { 
    $('#myList').append("<li>" + "<a href=\"javascript:GetLake(" + this.lakeCode + ");\">" + this.lakeName + "</a></li>"); 
}); 

Ou un un peu mieux, utilisez des méthodes DOM comme ceci:

$.each(data, function() { 
    $('<a />', { href: '#', click: function() { GetLake(this.lakeCode); } }) 
    .wrap('<li />').parent().appendTo('#myList'); 
}); 
+0

Ok, donc j'ai obtenu mon json validé et l'air bien. Cependant, this.lakeCode a été renvoyé comme non défini. Quoi d'autre ai-je manqué ?? –

+0

@ user293545 - ma faute, n'a pas vu votre 'data = [série];', juste utiliser 'series' directement. –

+0

cool merci Nick.javascript est une faiblesse pour moi :(Ok donc dans ma fonction GetLake comment est ma meilleure façon d'accéder aux objets Readings et de les sortir? Devrais-je avoir une variable quelque part? –