2016-05-04 39 views
0

我試圖讓Facebook的份額計數在一個頁面上的許多網址。要做到這一點,我打電話給http://graph.facebook.com他們每個人。因爲我在循環中執行此操作,所以我遇到了問題,我的循環在我的回調函數完成之前得到執行,所以我遇到了麻煩。我的代碼看起來像這樣Facebook的股份數,暫停,直到回調函數完成

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

有什麼使循環等到的getJSON回調函數完成,然後繼續還是我在一個錯誤的方式接近這一點?

回答

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

相關問題