Frage

Ich bin neu in Javascript und versuchen, einen Text in einem Objekt gespeichert zu extrahieren.

Das Objekt wird als Objekt literal definiert und wird in einem Javascript-Skript , die die Funktion aufruft. Das Skript (und Objekt) haben diese Struktur:

foo({
  "query": {
  "count": "2",
  "created": "2009-07-25T08:17:54Z",
  "lang": "en-US",
  },
  "results": {
   "result": [
    {
     "abstract": "<b>Pizza</b> Hut®. Order Online for Delivery or Carry-out. Fast &amp; Easy.",
     "title": "<b>Pizza</b> Hut"
    },
    {
     "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>",
     "title": "Domino's <b>Pizza</b>"
    }
   ]
  }
 }
});

Das Objekt wird in einer Callback-Funktion mit dem Namen „foo“ übergeben:

function foo(o){
  var out = document.getElementById('container');
  out.innerHTML = o.query.count;
}

Mein Problem: Ich weiß, wie die Abfrage Zählvariable auszudrucken mit der Callback-Funktion oben, aber ich weiß nicht, wie die den Titel des ersten Ergebnisses auszudrucken im Ergebnisarray .

Wie kann ich die Callback-Funktion ändere die erste Ergebnis Titel angezeigt werden? Und auch gibt es eine foreach-Anweisung, wo ich alle Titel aus allen den Ergebnissen drucken kann?

Danke!

UPDATE: JSBIN für diesen Code ist unter: http://jsbin.com/ejiwa/edit

War es hilfreich?

Lösung

Gibt es folgende Arbeiten:

o.results.result[0].title

das erste Ergebnis Titel zu bekommen? Und zu iterieren über alle Ergebnisse:

for (var i=0; i<o.results.result.length; i++) {
    var result = o.results.result[i];
    alert(result.title);
}

EDIT: Sind Sie sicher, dass Sie es richtig kopiert? Hier ist, was ich in Rhino bekommen:

js> o = {
  "query": {
  "count": "2",
  "created": "2009-07-25T08:17:54Z",
  "lang": "en-US",
  },
  "results": {
   "result": [
    {
     "abstract": "<b>Pizza</b> Hutr. Order Online for Delivery or Carry-out. Fast &amp; Easy.",
     "title": "<b>Pizza</b> Hut"
    },
    {
     "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>",
     "title": "Domino's <b>Pizza</b>"
    }
   ]
  }
 }

js> o.results.result[0].title
<b>Pizza</b> Hut

Andere Tipps

Ich bin nicht sicher, was der o-Parameter ist in Ihrer Callback-Funktion. Ich zuweisen in der Regel die XMLHttpRequest oder ActiveXObject zu einem globalen var req.

Dann einen Rückruf verwenden:

 function json_callback() {
    if (req.readyState == 4) {
            if (req.status == 200) {
                    jsonObj = eval("(" + req.responseText + ")");
                    var out = document.getElementById('container');
                    out.innerHTML = jsonObj.query.count;
            }
       }
 }

Es ist zu beachten, dass Sie nur eval verwenden sollten (), wenn Sie voll und ganz auf dem Server vertrauen, und die Daten der Server den Client senden. Es gibt JSON-Parser zur Verfügung, die tatsächlich schneller als eval sind () und auch sicherer, da sie es begrenzen, um nur JSON während eval () können alle JavaScript parsen und auszuführen, die ein Sicherheitsrisiko sein könnte. Es wird in der nächsten Version von ECMAScript erwartet, dass es ein Standard-JSON-Parser eingebaut werden.

Die eigentliche Objekt eine etwas andere Struktur hat als Sie geschrieben haben. results ist eigentlich ein Element der query. Also versuchen Sie dies:

o.query.results.result[0].title

Wie Sie aus dem JSON sehen können, das Objekt hat eine Eigenschaft „Ergebnisse“, die eine Eigenschaft „Ergebnis“ genannt enthält, die ein Array von Objekten ist.

Um die erste davon angezeigt werden, geben Sie einfach zu tun, wie Sie bereits mit Graf tat, sondern nur die Struktur auf den Titel statt folgen.

o.query.results.result[0].title

Um eine Schleife über jedes Ergebnis, können Sie einfach eine Schleife über das Ergebnis Eigenschaft wie ein Array, zum Beispiel wie folgt aus:

var results = o.query.results.result;
for(var i = 0; i < results.length; i++) {

}

JSON ist einfach JavaScript-Code. Denken Sie an das JSON-Snippet als JavaScript-Objektdeklaration und Sie sollten keine Probleme haben, es zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top