2016-05-04 13 views
0

私は1ページに多くのURLについてFacebookの共有数を取得しようとしています。これを行うには、私はそれぞれのためにhttp://graph.facebook.comを呼んでいます。私はループでこれをやっているので、問題に遭遇します。コールバック関数が終了する前にループが実行され、問題が発生します。私のコードは、getJSONが終了のコールバック関数までループ待機を行い、その後、私は間違った方法でこれを近づいて続行するか、午前には何があります。このFacebookの共有数、コールバック関数が終了するまで一時停止

$('span.share_counter').each(function() { 
      site_url=$(this).attr('id'); 
      getJSON(site_url, function(err, data) { 
       alert(site_url); 
      }); 
     }); 

のように見えますか?

答えて

1

基本的には、あなたがしたいことをする良い方法はありません。さらに、これをやろうとしてはいけません。 Javascriptはイベントループで実行されます。つまり、特定のアクションがブロックされている場合は、UI全体がフリーズします。

コールバックを作成すると、他のジョブに処理を依頼することでUIを継続できます。 getJsonは理由によりコールバックを受け取ります。潜在的に長い時間ブロックする可能性がありますが、これはイベントループにとって恐ろしいことです。

getJson()コールがすぐに戻る必要がないように、コードの再構成を試みる必要があります。潜在的にあなたが何をしたいのか

$('span.share_counter').each(function() { 
    var curElement = $(this); 
    var site_url = curElement.attr('id'); 
    getJSON(site_url, function(err, data) { 
     modifyElement(curElement, data) 
    }); 
}); 
+0

より良いアプローチがどうなるか任意のアイデア?私はスパンに入るデータをロードする必要があります。また、ページ上に「ajaxを使用して」ボタンを表示しています。これは、データをロードする必要があるスパンをさらにロードすることを意味します。 –

+0

.each内の対応する要素を指すローカル変数を作成することで、その要素を参照するコールバックを持つことができます。コールバックが解決したら、要素を新しいデータで更新してください。 – Strikeskids

+0

申し訳ありませんが、私が理解している限り、これは次のようなものでなければなりません:1.それぞれが必要なIDを(配列に)取得する、2.すべての要素を通過する別の通常のループを作成するgetJSON(for i = 0; i

関連する問題