2010-11-22 10 views
0

Also ich versuche JSON zum ersten Mal. Ich habe diesen Twitter-API-Feed, den ich ausgeben möchte. Nur neugierig, wo ich falsch liege. Beigefügt ist mein Code.JSON jQuery Frage

<!DOCTYPE html> 

<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-1.4.4.js"></script> 
    </head> 
    <body> 
    <ol class="result"></ol> 
    <script> 
     $.getJSON('http://api.twitter.com/1/trends/1105779.json', function(json) { 
     alert(json.trends.query[1]); 
     $('.result').html('<li>' + json.trends.query + '</li>'); 
     }); 
    </script> 
    </body> 
</html> 
<!-- http://api.twitter.com/1/trends/1105779.json --> 
+4

Und ich bin neugierig zu wissen, was dein Problem ist? – jfar

+0

Diese URL gibt keine JSON-Zeichenfolge zurück. – Inigoesdr

+1

ja tut es ..... – Hamish

Antwort

5

Ändern Sie die URL in 'http://api.twitter.com/1/trends/1105779.json?callback=?'.

Ihre Anfrage muss mit JSONP bearbeitet werden, um die XHR-Richtlinieneinschränkungen zu umgehen.

Wenn die URL etwas enthält, das ähnlich ist wie callback=?, macht jQuery seine Magie, um die Anfrage zu einer JSONP-Anfrage zu machen. Mehr dazu: http://api.jquery.com/jQuery.getJSON/

0

am json der Suche nach der URL zurückgegeben Sie gab, müssen Sie dies:

alert(json.trends[1].query); 

trends ist eine Liste von Objekten, von denen jedes query Schlüssel hat.

2

Ihr Problem ist, dass Sie versuchen, auf query zuzugreifen, als ob es ein Array wäre. Es ist nicht, es ist ein Objekt. trends ist das eigentliche Array. Wenn Sie also die query Eigenschaft des zweiten Objekts in dem trends Array wollten, das ist, was es scheint, dass Sie versuchen zu tun, würden Sie dies tun:

var query = json.trends[1].query; 

EDIT:

Wenn Sie sind, Wie ein Kommentator vorschlägt, versucht man, auf das erste Element im trends Array zuzugreifen, es ist am Array-Index 0. Also:

var query = json.trends[0].query; 

Ihre zweite Aussage ist json.trends.query auch ungültig, weil trends ein Array ist, kein Objekt, und hat keine Eigenschaft query. Wenn Ihr Ziel darin besteht, jede query-Eigenschaft aus allen Objekten im trends-Array zu erhalten, verwenden Sie das $.each()-Konstrukt von jQuery. Wie so:

$.each(json.trends, function(i, result) { 
    $('.result').append(result.query); 
}); 

Sie müssen auch callback=? bis zum Ende Ihrer Abfrage-String Sie $.getJSON() passieren hinzuzufügen. jQuery ersetzt ? durch einen zufällig generierten Funktionsnamen, mit dem jQuery Ihre Callback-Funktion aufrufen und die Daten übergeben kann. Dies implementiert eine JSONP Anfrage, die nicht der same-origin policy unterliegt.

Dass sie alle zusammen:

$.getJSON('http://api.twitter.com/1/trends/1105779.json?callback=?', function(json) { 
    alert(json.trends[1].query); 
    $.each(json.trends, function(i, result) { 
     $('.result').append(result.query); 
    }); 
    }); 
+0

Scheint wie es sein sollte 'json [0] .trends' (zumindest mit Chrom) – Hamish

+0

Nein ... Ich antwortete, wie er es gepostet. Zugriff auf das * second * -Element im Array, das den Index '1' hat. – Alex

+0

'@ Hamish' Ich habe meine Antwort nur aus Gründen der Vollständigkeit aktualisiert. – Alex