2

重複の可能性:
AJAX応答テキストを返す方法は?

次のコードを機能させようとしています。関数内の変数スコープで正しく行っていないことがあることはわかっていますが、何を理解できません(私は主にデザイナーですが、JSONとは何かを少し理解できてとてもうれしいです。 )。誰かが私を正しい方向に動かすことができますか?ありがとう :)

var list = new Array();

//Twitter
function twitter(photos){
    $.each(photos.results, function(index, photo){
        if (photo.entities.media){
            list.push(photo.entities.media[0].media_url);
            console.log(list); // working here, returns array
        }
    });     
}
var url = "https://search.twitter.com/search.json?callback=?&q=%23pikachu&include_entities=true&count=50";
$.getJSON(url, twitter);

console.log(list); //not working here, returns []
4

2 に答える 2

7

問題は、物事が実行される順序にあります。

  1. TwitterからJSONをリクエストする
  2. リストを印刷(空)
  3. JSON応答-リストがいっぱいになります。

ログにタイムスタンプを追加することで確認できます(つまりconsole.log(new Date() + ' '+list))。

この問題を解決する最も簡単な方法は、コールバックの最後で、getJSON行の下ではなくフォローアップロジックを呼び出すことです。

于 2012-12-23T10:17:13.060 に答える
1

コード内のパラメーター「twitter」は、関数「twitter」ではなく、「twitter」という名前の変数を意味します。

$.getJSON(url, twitter);

コードは次のようになります。

...
var twitter = (function(photos){
    $.each(photos.results, function(index, photo){
        if (photo.entities.media){
            list.push(photo.entities.media[0].media_url);
            console.log(list); // working here, returns array
        }
    });     
});
var url = "https://search.twitter.com/search.json?callback=?&q=%23pikachu&include_entities=true&count=50";
$.getJSON(url, twitter);
...
于 2012-12-23T13:08:14.167 に答える