2012-04-11 19 views
0

Mein Ziel ist es, durch eine Reihe von Ergebnissen zu iterieren und Sachen mit den Daten zu tun, aber aus irgendeinem Grund kann ich nicht die foreach Schleife in Javascript zu arbeiten, kann ich nicht scheinen, irgendwie zu machen Aufzählungsarbeit.Javascript forEach funktioniert nicht

Hier ist mein Test

console.debug("I got this far."); 
for(var i=0;i< results.length; i++){ 
    console.debug("Worked."); 
} 
console.debug("Past."); 
console.debug(results); 

ich auch

results.forEach(function(x) { console.debug("Worked"); }); 

und

for(var x in results) 

Keine scheinen, zu arbeiten versucht haben, ist es etwas, was ich falsch mache?

Der Ausgang für die oben ist

I got this far. query.html:39 
Past.   query.html:40 
[ Object , Object , Object , Object , Object , Object , Object , Object , Object , Object ] 

So weiß ich, dass die Ergebnisse Variable die richtige Art ist, aber es ist Iterieren einfach nicht. Es gibt einen anderen Ort, an dem forEach() gut funktioniert, aber hier ist es nicht, irgendwelche Vorschläge zum Debuggen und Adressieren wären hilfreich.

vollständige Code (Arbeitslösung)

var table; 
var request = { query : { match_all : {}}}; 
var map; 
function initialize(results) { 
    var myOptions = { 
     zoom: 8, 
     center: new google.maps.LatLng(41.4, -71.3), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById('map_canvas'), 
     myOptions); 
    results.forEach(function(x) { 
     var markerLoc = new google.maps.LatLng(x.location.lat, x.location.lon); 
     var marker = new google.maps.Marker({ 
     position: markerLoc, 
     map: map, 
     title: "Hello World!" 
     }); 
     }); 

}; 
$(document).ready(function() { 
     var results = []; 
     $.ajax({ 
      url: "http://localhost:9200/devices/devices/_search", 
      type: "POST", 
      data: JSON.stringify(request), 
      dataType: "json", 
      beforeSend: function(x) { 
       if (x && x.overrideMimeType) { 
        x.overrideMimeType("application/j-son;charset=UTF-8"); 

        } 
      }, 
      success: function(data) { 
       data.hits.hits.forEach(function(x) { results.push(x._source); }); 
       initialize(results); 
      } 

     }); 

}); 
+4

Was ist "Ergebnisse"? Welchen Wert hat 'results.length'? Wie ist es bevölkert? – Quentin

+1

Ich frage mich nur, ob 'Ich habe so weit 'ist in Zeile 39, wie' Past.' ist in Zeile 40. – taskinoor

+0

@Quentin: sieht aus wie 'var results = Object.create (Array.prototype);' – jAndy

Antwort

1

Sie passieren results zu initialize, sobald die Ajax-Anfrage wurde gesendet. Sie warten nicht auf die Antwort zurück, so dass der Code, der es füllt, nicht zu spät ausgelöst wird.

Verschieben Sie den Anruf zu initialize, so dass es in der success Handler ist.

+0

Sie sind mein Held des Tages. – lukecampbell