2010-11-22 14 views
0

私は初めてJSONを試しています。私はこのTwitter APIフィードを出力しようとしています。ちょうど私が間違っているところに興味がある。添付されたコードです。JSON jQuery質問

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

をそして私はあなたの問題が何であるかを知りたいんですか? – jfar

+0

そのURLはJSON文字列を返しません。 – Inigoesdr

+1

はいそれは..... – Hamish

答えて

5

URLを'http://api.twitter.com/1/trends/1105779.json?callback=?'に変更してください。

あなたのリクエストは、XHRポリシーの制限を回避するためにJSONPされている必要があります。

URLにcallback=?と似たものが含まれている場合、jQueryは要求をJSONPリクエストにするためにその魔法を使います。これについての詳細は:http://api.jquery.com/jQuery.getJSON/

0

は、あなたが与えたURLで返されるJSONを見ると、あなたはこの必要があります。

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

trendsqueryキーをそれぞれ有する、オブジェクトのリストです。

2

queryのようにアクセスしようとしています。それは目的ではありません。 trendsは実際の配列です。あなたがいる場合は、

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

EDIT:あなたはあなたがやろうとしている思われるものであるtrends配列、第二のオブジェクトのqueryプロパティを望んでいたのであれば、あなたはこれを行うだろうコメント者の示唆するように、trends配列のの最初の要素にアクセスしようとすると、配列インデックス0になります。だから、:trendsは、配列ではなくオブジェクトであり、何の財産queryを持っていないので、

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

あなたの2番目のステートメントは、json.trends.queryも無効です。あなたの目的がtrends配列内のすべてのオブジェクトから各queryプロパティを取得する場合は、jQueryの$.each()ルーピング構造を使用してください。これと同じように:

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

また、あなたが$.getJSON()に渡すクエリ文字列の末尾にcallback=?を追加する必要があります。 jQueryは?をランダムに生成された関数名に置き換えます。これにより、jQueryはコールバック関数を呼び出してデータを渡すことができます。これによりJSONPリクエストが実装されますが、same-origin policyの対象にはなりません。一緒にすべてを置く

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

'' json [0] .trends'(少なくともクロムで)のように思えます。 – Hamish

+0

いいえ...投稿したときに私は答えました。配列の* second *要素にアクセスします。この要素はインデックス '1'にあります。 – Alex

+0

'@ Hamish'私は完全性のために私の答えを更新しました。 – Alex