Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617

    Non scatenare altri eventi durante lo svolgimento di una funzione!

    Lo so, il titolo è contorto ma francamente non sapevo come scrivere.

    In pratica ho questo problema, con questa semplice funzioncina:

    codice:
       	$(window).scroll(function() {           if($(window).scrollTop() + $(window).height() == $(document).height()) {
                     
    				 $("#content-list").append("ciao<br/>");
    				 
             }
    Aggiungo un "ciao" ad una lista quando l'utente arriva a fine pagina. Chiaramente al posto del ciao ci sarà una chiamata ajax al database e qui mi giunge la domanda. Come faccio ad evitare che durante la chiamata ajax l'utente non salga e scenda ulteriormente con la barra e mi scateni un secondo evento ajax?

    Disabilitare la barra laterale mi pare cattiveria, se uno vuole salire durante il caricamento non lo può fare.

    Grazie per l'aiuto in anticipo !

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Potresti eseguire la chiamata sincrona (il browser si blocca e attende la risposta dal server) invece che asincrona (il browser continua a funzionare indipendente dalla risposta del server).
    Devi fare attenzione le chiamate sincrone vanno usate con giudizio e il codice lato server (php o aspx etc) deve essere ottimizzato e prevedere dei time-out in caso di problemi o di sovraccarichi server per non impallare il browser.

    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Scusa l'ignoranza ma come faccio una chiamata sincrona invece di una asincrona? Sembra strano ma so fare solo l'asincrona eheheh!

    Grazie in anticipo !

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Leggi qui (anche se potevi usare anche tu google) insisto nel fare molta attenzione con le chiamate sincrone e visto che blocca il browser meglio mettere un messaggio d'attesa
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Grazie, non è che non usi google ma mi trovavo....e un imbeccata diretta fa sempre piacere ! Adesso provo a quanto pare si può fare anche con jquery basta mettere async:false. Almeno così mi è parso di capire !

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    un altra soluzione potrebbe essere quella di controllare se la chiamata ajax è terminata prima di effettuarne un altra

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Bhe a dirla tutta in origine l'idea era proprio quella di controllare che fosse finita ma non so come metterla gù inuna chiamata ajax con jquery

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Ok, riprendo l'argomento perchè francamente trovo pochissime cose e poco utili.

    Ho scritto questo:

    codice:
    	$(window).scroll(function() {
               if($(window).scrollTop() + $(window).height() == $(document).height()) {		
    		 
    		var offset = $( ".list-box li" ).length;   
    		
    		$.ajax({
                          url: 'url',
                          type: 'get',
    					  data: 'offset='+offset+'&token='+token,
                          success: function(response) {
    	
    	                            $(".list-box").append(response);
                                
    							 },
    					error:function(data){
                                      
    								  alert("error: " + data);
                           }		 
                      });			   
    		   
    		   }
    });
    Il codice funziona, ogni volta che arrivo alla fine della lista parte la chiamata ajax e mi vengono caricati altri 500 record dal database. Credevo di avercela fatta ma ho notato che se la lista diventa molto lunga basta cliccare anche solo un link per far freezare il browser, in pratica non sembra essere cambiato granchè rispetto a prima. Dove stò sbagliando?

    Grazie in anticipo !

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ma hai cambiato qualcosa rispetto a prima? hai lasciato la chiamata asincrona? non hai aggiunto nessun controllo? cliccando un link che succede? vengono ancora efettuate chiamate multiple se l'utente scende con la barra di scorrimento?

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Allora ho aggiunto async: false alla chiamata ajax in questo modo le chiamate sono sincrone e stò sicuro che prima di poter operare un altra chiamata deve finire la precedente. Sfortunatamente però il problema resta. Più aumentano gli item/<li> della lista più lo scorrimento diventa "scattoso". Diciamo che potrebbe essere anche accettabile (con molta pasienza) ma il dramma sorge se dopo aver tirato fuori la lista completa voglio filtrare. Mi spiego: in cima a questa lista ho un select/filtro che quando cambia effettua una chiamata ajax al database e mi tira fuori solo gli elementi di riferimento. Funziona benissimo con un lista normale, ma se cerco di utilizzarlo con la lista completa si impalla chrome e chiede pure se è il caso di crashare la pagina visto che non risponde.

    Ecco la situazione. Per i controlli. Che tipo di controllo devo aggiungere? La chiamata sincrona credo possa bastare, se me ne suggerite qualcun'altro.

    Stà diventando un esaurimento questa cosa anche perchè mi domando, facebook come fa ?(per esempio). Questo mi porta a pensare che sicuro sbaglio in qualche cosa ma non so cosa. Non credo che sia impossibile avere una lista così lunga, un modo ci sarà.

    Grazie in anticipo !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.