2013-04-24 131 views
1

我使用setinterval每10分鐘運行一次ajax調用。這個調用是從一個php頁面獲取新的發佈數據並將其投入到一個變量中。當我想要加載新的發佈數據時,我會點擊一個鏈接並將其添加到頁面上。setInterval和Ajax問題

我遇到了問題,如果頁面處於非活動狀態30分鐘,它運行3次(每分鐘)ajax調用。然後,當我點擊鏈接加載新帖子時,它們被加載3次。

我需要他們只能加載一次。

這是我的代碼。

var getNewPosts = function() { 
    $.ajax({ 
     type: 'GET', 
     url: 'interactions/get_new_posts.php', 
     async: true, 
     cache: false, 
     //dataType: 'json', 
     success: function(results) { 
      var data = results; 
      // New Posts 
      var instagramPosts = $(data).find('#instagramPosts').html(); 


      //Load new Instagram Posts 
      $(document).one('click', '.instagram_menu', function(e) { 
       $('#feed_wrap').prepend(instagramPosts).isotope('reloadItems').isotope({ sortBy: 'original-order' }); 
       console.log(instagramPosts); 
      }); 

     }, 
     error: function(results) { 
      //console.log('true', results); 


     } 
    }); 
}; 

var interval = 1000 * 60 * 10; // Last int is minutes 
setInterval(getNewPosts, interval); 

所以你可以看到它將新帖子加載到變量instagramPosts中。然後,當我點擊.instagram_menu時,它預先添加了這些新帖子。

問題是,如果我讓它坐下來多次調用這個函數,那麼我點擊.instagram_menu,它會加載這些帖子函數被調用的次數。

我該去哪裏?我希望指出正確的學習方向,不要只給我一些代碼,並且每天給它打電話。謝謝

回答

0

我會取消綁定點擊然後再綁定。我不確定'一'是做什麼的?

setInterval(bang, 1000); 


function bang(){ 

$('#clickme').unbind('click'); 
$('#clickme').one('click', function(){ 

    alert('bang'); 

}); 


} 
+0

http://api.jquery.com/one/。 – Ryan 2013-04-24 16:13:10

+0

是的,我認爲你想解除綁定點擊「除了第一次調用後處理程序被解除綁定之外,此方法的第一種形式與.bind()相同」。每次調用該函數時,都會綁定另一個單擊事件,該事件一旦被點擊或調用就會解除綁定。取消綁定也可以與其中一個一起工作http://jsfiddle.net/jY2sg/ – Matt 2013-04-24 16:27:11

+0

問題在於它預先調用了函數被調用的數據x次數。我可以防止點擊發生多次,這是點擊時被預先添加的數據。 – Ryan 2013-04-24 16:58:09