Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    393

    Alleggerire Autocomplete suggest

    Premetto che non sono esperto di javascript ma che sono riuscito a far funzionare bene una ricerca in tempo reale in un database da un input.

    Il punto è che ogni lettera digitata nell'input fa una ricerca nel database immenso e vorrei regolamentare la cosa limitando in qualche modo il numero di volte ravvicinate che effettua la ricerca nel database.

    Ho pensato che una soluzione potrebbe essere che se, mettiamo, digito 'abcd' in meno di 0.4 secondi, effettua solamente la ricerca delle quattro lettere insieme e non prima 'a', poi 'ab', poi 'abc' e poi 'abcd'.

    Vi sembra un'idea fattibile? Come? Altre idee?

    Lo script che ricarica la pagina che effettua le ricerche è questo:



    codice:
    function suggest(inputString){
    	if(inputString.length == 0) {
    		$('#suggestions').fadeOut();
    	} else {
    	$('#search_input').addClass('load');
    		$.post("autosuggest.php", {queryString: ""+inputString+""}, function(data){
    			if(data.length >0) {
    				$('#suggestions').fadeIn();
    				$('#suggestionsList').html(data);
    				$('#search_input').removeClass('load');
    			}
    		});
    	}
    }

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133

    Re: Alleggerire Autocomplete suggest

    Originariamente inviato da giordano81
    Vi sembra un'idea fattibile?
    Ma ho forti dubbi, e comunque sarebbe complicato gestire i tempi
    Come?
    Boh....
    Altre idee?
    io farei il più semplice <input type="text" id="cerca" name="cerca" onkeyup="if(this.value.length > 4){suggest(this.value)}" />
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ma di quale script per l' autosuggest stiamo parlando?
    quello di base di jquery UI ha gia' delle opzioni per evitare di inviare troppo spesso

    delay e minlength per esempio: se minlength e' 3 servono almeno 3 caratteri, se delay e' 1000 la richiesta partira' solo un secondo dopo aver digitato l' ultimo carattere

    ciao e buone feste

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    393
    uso jquery, ma purtroppo non la versione UI quindi non c'è traccia del parametro delay...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    393
    Posso modificare lo script che ho aggiungendo qualcosa del tipo
    codice:
    setTimeout(function () {suggest(inputString)}, 1000);
    Poi un'altra domanda...ma con il delay faccio comunque lo stesso numero di richieste al database, ma rinviate oppure rinvio la richiesta e faccio solo l'ultima?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    393
    Purtroppo non uso jquery ui ma jquery. in particolare uso questa funzione per richiamare la pagina che cerca i risultati:

    Codice PHP:
    function suggest(inputString){
        if(
    inputString.length 3) {
            $(
    '#suggestions').fadeOut();
        } else {
        $(
    '#search_input').addClass('load');
        $.
    post("inc/search_autosuggest.php?list=" + $('#select_hidden').val(), {queryString""+inputString+""}, function(data){
            if(
    data.length >0) {
                $(
    '#suggestions').fadeIn();
                $(
    '#suggestionsList').html(data);
                $(
    '#search_input').removeClass('load');
            }
        });
        }

    Secondo voi in che modo potrei modificarla mettendoci in metto un delay tipo
    Codice PHP:
    $("#suggestions").delay(1000); 
    per il richiamo della pagina?

    Grazie in anticipo

  7. #7
    Potresti, dopo l'ultimo carattere digitato, accodare l'invocazione della funzione con setTimeout, salvando il riferimento che ti torna la setTimeout.
    Prima però, se hai già un riferimento salvato, ritornato dalla setTimeout, e la funzione ancora non è partita, effetti una clearTimeout sul riferimento.
    Riassumendo:

    1) if ref != null && started = false : clearTimeout(ref); ref = null;
    2) ref = setTimeout(func, time)

    In questo modo hai qualcosa tipo questo:

    Ho pensato che una soluzione potrebbe essere che se, mettiamo, digito 'abcd' in meno di 0.4 secondi, effettua solamente la ricerca delle quattro lettere insieme e non prima 'a', poi 'ab', poi 'abc' e poi 'abcd'.
    sei certo che non partano chiamate troppo frequenti.

    Questo per quanto riguarda il tempo.


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.