2015-04-14 7 views
5

Aby wczytać dane, gdy strona przewija w dół za pomocą funkcji jak tenpodczas ładowania danych Ajax strona przewija w dół za pomocą PHP

$(window).scroll(function(){ 
     if ($(window).scrollTop() == $(document).height() - $(window).height()) 
     { 
      //alert('Scrolling Down'); 
      get_summary_details(); //Here it calls AJax Function load the data 

     } 
    }); 

get_summary_details() funkcja działa poprawnie, gdy Funkcja strony przewija down.This jest tak

function get_summary_details() 
    { 

     var dataString=[]; 
     $('div.company_summary_data').each(function() { 
      var id = $(this).attr('id'); 
      dataString.push(id); 
     });      
     $.ajax({ 
      url:"getajaxcompanysummarydetails", 
      type:"POST", 
      //dataType: "json", 
      data:"last_app_data_id="+JSON.stringify(dataString), 
      success:function(data) 
      {        
       $('.company_summary_data:last').after(data); 

      } 

     });   
    } 

Mój problem jest

  • podczas get_summary_details() przetwarzanie użytkownik Zapytanie trafi do top strony i Scroll w dół, ponownie ta funkcja get_summary_details() zostanie wykonana.

Jak zapobiec przetwarzaniu drugiego wniosku bez wypełniania pierwszego wniosku. Czy jest to możliwe? Z tego powodu otrzymuję duplikaty rekordów danych. Muszę zapobiec wyświetlaniu duplikatów rekordów.

Dzięki!

+0

Co za pomocą 'Boolean' flagę w celu sprawdzenia, czy wniosek jest w toku, czy nie? – Regent

+0

Przepraszam, że cię nie dostałem. Czy możesz wyjaśnić krótko .. @ Regent – Krishna38

Odpowiedz

1

Trzeba sprawdzić, czy żądanie ajax jest zajęty przez ustawienie flagi wartości logicznej

var loadingSummaryDetails = false; 

ustawić go na true po uruchomieniu Ajax i false gdy wywołanie kończy

function get_summary_details() 
{ 
    if(loadingSummaryDetails) { 
     return; 
    } 
    loadingSummaryDetails = true; 

    var dataString=[]; 
    $('div.company_summary_data').each(function() { 
     var id = $(this).attr('id'); 
     dataString.push(id); 
    });      
    $.ajax({ 
     url:"getajaxcompanysummarydetails", 
     type:"POST", 
     //dataType: "json", 
     data:"last_app_data_id="+JSON.stringify(dataString), 
     success:function(data) 
     {  
      $('.company_summary_data:last').after(data); 

     } 

    }).always(function() 
     {  
      loadingSummaryDetails = false; 
     });   
} 
+0

Dzięki! Działa dobrze. – Krishna38

+0

@ user3454479 'loadingSummaryDetails' to flaga' Boolean', o której mówiłem. – Regent

+0

@Regent Zmieniłem go, aby korzystać z metody zawsze teraz – Martin

2

Twój Żądania AJAX najprawdopodobniej stoją w kolejce jedna za drugą, ponieważ są asynchroniczne, nawet jeśli sam JavaScript jest w większości pojedynczy.

Możesz użyć metody abort(), aby upewnić się, że działa tylko jedno żądanie naraz. Trzeba przypisać obiekt jqXHR zwrócony przez $.ajax() do zmiennej:

zapoznaj tej link

+0

Dziękujemy za informacje. – Krishna38

Powiązane problemy