2016-07-13 16 views
1

Dank this post, in dem die akzeptierte Antwort eine JS-Fiddle enthält, konnte ich überprüfen, ob ich meine Daten mit filtern kann. Ich bin jedoch nicht in der Lage, den Effekt mithilfe der Ausgabe von meinem Server zu replizieren. Ich vermute, dass ich etwas übersehen habe, was offensichtlich in der Referenzierung des Objekts ist, aber da ich neu in JavaScript bin, denke ich, dass ich jemanden brauche, der es auf mich aufmerksam macht.Verweis auf ein JSON-Objekt zum Filtern mit jQuery.grep()

Dies ist mein Datenausgang, ein Array von Objekten:

[{"id":"3","src":"url1","category":"A"}, 
{"id":"32","src":"url2","category":"D"}, 
{"id":"38","src":"url3","category":"E"}, 
{"id":"39","src":"url4","category":"E"}, 
{"id":"42","src":"url5","category":"F"}, 
{"id":"49","src":"url6","category":"B"}, 
{"id":"44","src":"url7","category":"F"}] 

ich den folgenden Code verwenden, um Einträge in der Kategorie F zu filtern:

var obj = [{"id":"3","src":"url1","category":"A"}, 
 
{"id":"32","src":"url2","category":"D"}, 
 
{"id":"38","src":"url3","category":"E"}, 
 
{"id":"39","src":"url4","category":"E"}, 
 
{"id":"42","src":"url5","category":"F"}, 
 
{"id":"49","src":"url6","category":"B"}, 
 
{"id":"44","src":"url7","category":"F"}]; 
 

 
obj = $.grep(obj, function(element, index){ 
 
    return element.category == "F" // keep elements in category F 
 
}); 
 

 
console.log(obj);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Das ist mein Ajax-Anruf an den Server:

var obj = $.post(url, {term: term }, function(data){ 
}, 'json' 
); 

Bei der Ausführung console.log(obj); finde ich meine Daten als ein Objekt in der Konsole ausgegeben, aber scheint nicht zu bekommen. Damit die Grep-Funktion funktioniert, muss ich auf die Ausgabe als ein Array von Objekten zugreifen. Es ist da, wartet auf mich, aber wie referenziere ich es?

+0

Das Ergebnis 'grep' zugreifen ist eine Anordnung von Objekten. [MDN-Array] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Accessing_array_elements) – destoryer

+0

Verwenden Sie immer triple equals (===), wenn Sie Zeichenfolgenvergleiche durchführen. –

+0

@ Samuel, warum === und nicht ==? Beide scheinen in meinem Fall zu funktionieren. – guiltybyintent

Antwort

1

Wenn Sie das tun:

var obj = $.post(url, {term: term }, function(data){ 
}, 'json'); 

obj ist ein Versprechen, nicht die Antwortdaten

Sie müssen die Antwortdaten innerhalb der Erfolg Rückruf

$.post(url, {term: term }, function(data){ 
    var obj = $.grep(data, function(element, index){ 
     return element.category == "F" // keep elements in category F 
    }); 
    console.log(obj);  
}, 'json'); 
+0

Danke ein Haufen, @charlietfl! Ich wusste, dass es eine einfache Lösung dafür geben musste ... – guiltybyintent

+0

erinnern Sie sich, dass Ajax asynchron ist – charlietfl

+0

Könnten Sie bitte ausarbeiten? Welche Auswirkungen haben asynchrone Aufrufe in diesem Fall? – guiltybyintent