2016-05-04 33 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

相关问题