2013-12-14 59 views
1

這很可能是重複的,是的,我已經看到它們herehere。我的問題與第二個問題非常相似。當用戶滾動到底部時,多次觸發Ajax函數

第二個鏈接顯示,來解決這個問題,我們必須做這樣的事情:

function loadMoreResults() { 
    if (flag) return; 
    flag = true; 
[...] 
    flag = false; 
} 

我已經盡了實際的代碼中安裝這樣的邏輯,但它所做的就是給語法錯誤,不管了()'和{}已被正確打開和關閉。也許我做錯了。

$(document).ready(

    function loadAll (param) { 
     if (param < 0) { 
      return; 
     } else if (isNaN(param)) { 
      param = param.responseText; 
     } else if (!isNaN(param)) { 
     } 

     $.ajax({ 
      url: '../login/functionLogin/functions.php', 
      type: 'POST', 
      dataType: 'JSON', 
      data: {task: "load", next_id: param}, 
      success: function(data) { 
       next_id = data.next_id; 
       $.each(results, function(i, attr) { 
        //Do whatever and return next_id 
        }  
       }) 

      } 
     }); 

     //Since the next_id is within the function, I do not have to make it global. 

     $(window).scroll(function() { //If user scrolls to bottom, fire anything inside 
       if ($(window).scrollTop() >= $(document).height() - $(window).height()) { 

        loadAll(next_id).die(); //Firing twice or even thrice 

     } 
    }) 

}); 

問題:如何阻止我當前的腳本發射兩次?這個劇本的結構很好嗎? [我強烈感覺這是非常糟糕的設計和導致這個問題的一個]

我可以詳細說明更多。我試着用這個問題最好的措辭。

回答

1

看來你回答了你自己的問題!添加一個變量並檢查它是否未定義,然後執行處理,如果已經設置,則不要執行任何操作。

$(window).scroll(function() { //If user scrolls to bottom, fire anything inside 
      if ($(window).scrollTop() >= $(document).height() - $(window).height()) { 
       if (typeof flag != 'undefined' && flag) return; 
       loadAll(next_id); // .die(); // what is the die(); ??? //Firing twice or even thrice 
       flag = true; 

     } 
    }) 
+0

謝謝!這似乎已經成功了。 .die()試圖以某種方式解決這個問題。我認爲如果我用死()它不會再被解僱,但這是沒用的。 –

+0

@TiffanyLowe我知道有一個die()在PHP中,但從來沒有聽說過死於JavaScript。無論如何,如果它解決了您的問題,請將其標記爲解決方案。 –

+1

jQuery曾經有一個'.die()'函數 - 它刪除了添加了'.live()'的事件處理函數。但是'loadAll(next_id).die();'會是一個錯誤,因爲loadAll()不會返回一個jQuery對象...... – nnnnnn

相關問題