2015-04-14 13 views
5

Per caricare i dati quando pagina scorre verso il basso con funzione come questa funzionecarico durante pagina scorre verso il basso con 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() funziona bene quando la funzione di pagina scorre down.This è come questo

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); 

      } 

     });   
    } 

il mio problema è

  • mentre get_summary_details() elaborazione l'utente richiesta andrà a top della pagina e Scroll verso il basso, verrà eseguita nuovamente questa funzione get_summary_details().

Come impedire che l'elaborazione di seconda richiesta senza il completamento della prima richiesta. Questo è possibile? Per questo sto ricevendo record duplicati di dati. Devo impedire di visualizzare record duplicati.

Grazie!

+0

Cosa succede ad usare 'bandiera boolean' per verificare se la richiesta è in corso o no? – Regent

+0

Scusa se non ti ho preso. Potresti spiegare brevemente .. @ Regent – Krishna38

risposta

1

è necessario verificare se la richiesta Ajax è occupato impostando un flag booleano

var loadingSummaryDetails = false; 

Impostare a true quando si avvia l'Ajax e false quando la chiamata finisce

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

Grazie! Funziona bene. – Krishna38

+0

@ user3454479 'loadingSummaryDetails' è la bandiera' Boolean' di cui stavo parlando. – Regent

+0

@Regent L'ho modificato per utilizzare sempre il metodo ora – Martin

2

tuo Le richieste AJAX sono molto probabilmente in coda l'una dietro l'altra, perché sono asincrone, anche se JavaScript è per lo più single threaded.

È possibile utilizzare il metodo abort() per assicurarsi che venga eseguita una sola richiesta alla volta. È necessario assegnare l'oggetto restituito da jqXHR $.ajax() ad una variabile:

si rimanda questo link

+0

Grazie per le tue informazioni. – Krishna38

Problemi correlati