2016-04-04 7 views
1

Also funktioniert der ganze Code ziemlich gut. Eine Datenbank wird abgefragt, die Knoten-/Eltern-IDs werden träge an jsTree übergeben, und wenn man einen Begriff in die Suchleiste eingibt, geht ein ähnlicher Prozess weiter, aber die an jsTree übergebenen Knoten sind diejenigen, die von einer anderen SQL-Abfrage zurückgegeben werden wie SELECT nodeID FROM table WHERE name LIKE %searchTerm%).Suche & LazyLoad kann mit Tippgeschwindigkeit nicht mithalten?

Es gibt nur ein Problem:

Wenn ich zu schnell in die Suchleiste eingeben, erhalten die Ergebnisse alle miteinander vermischt. Wenn ich langsam tippe (ich würde maximal 2 Buchstaben pro Sekunde schätzen), funktioniert alles gut. Irgendwelche schneller und alles ist zusammen verwischt. (Das heißt, wenn ich nach Namen suche, die den Begriff "test" enthalten und diesen schnell eingeben, erhalte ich Namen, die "t", "te", "tes" und "test" statt nur enthalten Namen, die "Test" enthalten.)

Wer hat dieses Problem schon einmal? Gibt es eine "warten bis bereit" -Funktion, die ich verwenden sollte?

+0

Sie interessieren könnten in Ihre SQL-Logik zu suchen. Wenn Sie "name LIKE %searchTerm%" tun, werden Sie einen vollständigen Tabellenscan durchführen, der langsam ist. Möglicherweise möchten Sie die Zeichenfolgen in Ihrer App zwischenspeichern und eine schnelle Regex-Übereinstimmung durchführen, um lange Wartezeiten in db zu vermeiden. – randominstanceOfLivingThing

Antwort

3

Ich kann Ihnen vorschlagen, die Workout 'Timeout' zu tun. Grundsätzlich erstellen Sie eine SetTimeout-Funktion mit einer Verzögerung von 200-400 Millisekunden und starten dort Ihren Lazyload-Ajax. Jedes inputbox.change -Ereignis startet die Zeit neu. Beispiel in pseudo-javascript:

$('#your-input').keydown(function(){ 
    if(ajaxTimer != undefined) { 
     clearTimeout(ajaxTimer); 
    } 
    ajaxTimer = setTimeout(function(){ 
     $.ajax({...}).done(function() {...} 
    },400); 
}) 
0

eine Drossel auf der Eingabe Verwenden Sie garantiert im Grunde, dass eine Funktion ein maxmimum von einmal alle X Sekunden aufgerufen wird. Sicher könntest du dein eigenes schreiben aber es gibt schon eine großartige Bibliothek dort draußen.

, check it out, wenn Sie http://benalman.com/projects/jquery-throttle-debounce-plugin/

Verwandte Themen