2 Stimmen

Schleife durch ein JSON responseText-Array unter Verwendung der Schlüssel mit Javascript

Javascript verwenden. Ich versuche, eine Schleife durch ein Array mit JSON kodiert. Hier ist ein Beispiel für das Array:

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

In jeder Schleife prüfe ich, ob eine DIV-ID mit dem Namen der Schlüssel existiert.

<div id="test1"></div>
<div id="test2"></div>
<div id="test3"></div>

Ich verwende eine for()-Schleife, aber ich kann sie nicht zum Laufen bringen. Wenn ich die for()-Schleife entferne, funktioniert es ganz gut, wenn ich nur nach 1 DIV-ID suche.

for(var key in responseText)

Hier ist das Skript. Weiß jemand, wie ich durch das Array von responseText mit den Array-Schlüsseln als die Namen der DIV-IDs Schleife kann?

<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>

1voto

Chris Laplante Punkte 28784

Sie müssen das JSON dekodieren, bevor Sie über die Schlüssel iterieren. Also, wo Sie sagen:

for(var key in responseText) {

ersetzen Sie das durch:

for(var key in data) {

unter der Annahme, dass

 var data = JSON.decode(responseText);

Außerdem geben einige Ihrer Callback-Funktionen nicht an responseText als Parameter. Wenn Sie für jeden Rückruf darauf zugreifen wollen, müssen Sie explizit responseText als Parameter. Beispiel:

onRequest: function(){

sein sollte:

onRequest: function(responseText){

0voto

Mike Samuel Punkte 113550

Ich glaube, das Problem ist, dass Sie den falschen Variablennamen verwenden.

var data = JSON.decode(responseText);

for(var key in responseText) {

Sollte lauten

var data = JSON.decode(responseText);

for(var key in data) {

Beachten Sie, dass anstelle von responseText après in heißt es data .

0voto

user113716 Punkte 309387

Sind Sie sicher, dass Sie nicht wollen, dass JSON.parse ? Dies würde die JSON-Antwort in ein Javascript-Objekt parsen, das Sie mit dem for/in gegen.

var data = JSON.parse(responseText);

Außerdem fehlt ein schließendes Anführungszeichen nach der url:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X