3

$.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ query1 + '&callback=?',
  function(data) {
    alert('JSON data string 1 is: '+data); 
    $.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ query2 + '&callback=?', 
      function(data1) {
        alert('JSON data string 2 is: '+data1); 
        f2=data1; 
        f1=data; 
        for(var i=0; i "less than" f1.length; i++)
        {
          for(var j=0; j "less than" f2.length; i++)
          {
            if (f1[i] == f2[j])
            {
              common[c]=f1[i];
              c+=1;
            }
          }
        }
        $('#content').append(''+common.length+'');//this line is not working though....... 
    });
});

この行の一部では

$('#content').append(''+common.length+'');

ページがハングする実際の出力は表示されません

どんな助けでもありがたいです。

ありがとうございました

4

5 に答える 5

6

呼び出しをネストしないでください。また、javascriptがすべての無名関数のすべてのローカル変数のコピーを保持するメモリの問題も回避できます。2つの呼び出しを別々に行うことにより、両方の呼び出しを順番にではなく一度に実行することもできます。

私があなたの目的を理解しているなら、これはより良い方法です。さらに、gotAとgotBをポーリングすることで、ユーザーに「Aを待っている、Bを待っている」というちょっとした通知を作成することもできます。

編集:前の回答からのforループ修正を追加しました。

var gotA, gotB;
var followingA, followingB;
function getCommonFollowers(user1, user2)
{
    gotA = false;
    gotB = false;
    jQuery.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ user1 + '&callback=?', gotFollowersOfA );
    jQuery.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ user2 + '&callback=?', gotFollowerOfB );
}
function gotFollowersOfA(data)
{
    followingA = data;
    gotA = true;
    if (gotB) {
        compareFollowersAB();
    }
}
function gotFollowersOfB(data)
{
    followingB = data;
    gotB = true;
    if (gotA) {
        compareFollowersAB();
    }
}
function compareFollowersAB()
{
    f2=followingA; 
    f1=followingB; 
    for(var i=0; i < f1.length; i++) {
        for(var j=0; j < f2.length; j++) {
            if (f1[i] == f2[j]) {
                //console.log("Adding f1[i]");
                common.push(f1[i]);
            }
        }
    }
    $('#content').append(''+common.length+'');
}
于 2009-07-07T17:38:03.957 に答える
2

2番目のforループは、jではなくiをインクリメントします。

スコープの問題などにつながる可能性のある変数を宣言しないでください。

実際のコードを貼り付けることはできますか。スクリプトなしで誰かが問題を診断することを期待するのは難しいことです。

また、問題のデモをjsbin.comまたはpastebin.meで作成してください。

于 2009-07-07T17:25:52.717 に答える
1

Great Turtleの推奨事項を確実に使用する必要がありますが、とにかく試してみたので、機能するコードの修正バージョンを次に示します。

        var query1 = 'user1';
        var query2 = 'user2';
        var data;
        var data1; 
        var f1;
        var f2;
        var common = [];
        var c = 0;
        
        $(document).ready(function() {
            $.getJSON('http://twitter.com/followers/ids.json?screen_name=' + query1 + '&callback=?', 
                function(data) { 
                console.log('JSON data string 1 is: ' + data); 
                $.getJSON('http://twitter.com/followers/ids.json?screen_name=' + query2 + '&callback=?', 
                    function(data1) { 
                    console.log('JSON data string 2 is: ' + data1); 
                    f2=data1; 
                    f1=data; 
                    for(var i=0; i < f1.length; i++) {
                        for(var j=0; j < f2.length; j++) {
                            if (f1[i] == f2[j]) {
                                //console.log("Adding f1[i]");
                                common.push(f1[i]);
                            }
                        }
                    }
                    $('#content').append(''+common.length+'');
                }); 
            });
        });

主な修正は、前述のように、2番目のforループがj++ではなくi++を使用していたため、ループがおかしくなっていたことです。

アラート呼び出しをconsole.logに変更したので、FirebugがインストールされたFirefoxを使用していることを確認するか、単にconsole.logをアラートに置き換えてください。

于 2009-07-07T17:46:53.797 に答える
0

'http://'であるべきではありませんか?

$.getJSON('http://twitter.com...'

于 2009-07-07T17:12:22.200 に答える
0

json関数の外部で共通の変数を宣言します。

于 2009-07-07T19:03:25.517 に答える