2010-11-13 4 views
1

Utilisation de Javascript. J'essaye de faire une boucle à travers un tableau encodé avec JSON. Voici un échantillon du tableau:Boucle via un tableau JSON responseText utilisant les clés avec Javascript

{"test1":"some info","test2":"more info","test3":"more stuff"} 

l'intérieur de chaque boucle Je vérifie pour voir si un identifiant DIV existe avec le nom des clés. J'utilise une boucle for(), mais je n'arrive pas à le faire fonctionner. Si je supprime la boucle for() cela fonctionne très bien si je recherche seulement 1 ID DIV.

for(var key in responseText) 

Voici le script. Est-ce que quelqu'un sait comment je peux boucler à travers le tableau de responseText en utilisant les clés de tableau comme les noms de l'ID DIV?

<script> 
function loadInfo(){ 
var req = new Request({ 
    method:'get', 
    url:'getinfo.php, 
    noCache: true, 
    onRequest: function(){ 

     for(var key in responseText) { 

      if (document.getElementById(key)) { 

       $(key).set('html', 'Loading'); 

      } 

     } 

    }, 
    onComplete:function(responseText, responseHtml){ 
     if (JSON.decode(responseText) != null){ 
      var data = JSON.decode(responseText); 

      for(var key in responseText) { 

       if (document.getElementById(key)) { 

        $(key).set('html', data[key]); 

       } 

      } 
     } 
    }, 
    onFailure: function(){ 

     for(var key in responseText) { 

      if (document.getElementById(key)) { 

           $(key).set('html', '-'); 
          } 

     } 

    }   
}).send(); 
} 
window.addEvent('domready', function(){ 
loadInfo(); 
}); 
</script> 

Répondre

1

Vous devez décoder le JSON avant de parcourir les clés. Alors, où vous dites:

for(var key in responseText) { 

remplacer par:

for(var key in data) { 

en supposant

var data = JSON.decode(responseText); 

En outre, certaines de vos fonctions de rappel ne précisent pas responseText comme paramètre. Si vous voulez accéder à ceci pour chaque rappel, vous devez inclure explicitement responseText en tant que paramètre. Exemple:

onRequest: function(){ 

devrait être:

onRequest: function(responseText){ 
0

Je pense que le problème est que vous utilisez le nom de la variable mal.

var data = JSON.decode(responseText); 

for(var key in responseText) { 

devriez lire

var data = JSON.decode(responseText); 

for(var key in data) { 

Notez qu'au lieu de responseText après in, il lit data.

0

Etes-vous sûr de ne pas vouloir JSON.parse? Cela analyserait la réponse JSON dans un objet javascript que vous pouvez utiliser le for/in.

var data = JSON.parse(responseText); 

De plus, vous manquez un guillemet de fermeture après la url:

url:'getinfo.php', // Closed the quote 
+0

Merci de remarquer le guillemet de clôture. Ce n'est pas manquant dans mon script en direct. – Mark

Questions connexes