Matraz
@app.route("/get_title", methods = ["POST"]) def send_title(): data = request.get_json() qry = Category.query.filter(Category.book_category == data['category']).first() qry = [(i.bookname) for i in qry.booklist.filter(Books.bookname.like(data["search"])).limit(10)] return json.dumps(qry)JavaScript
async function loadNames(selectval, inputval) { var your_data = { "category": selectval, "search": `%${inputval}%` } const response = await fetch(`/get_title`, { method: "POST", credentials: "include", body: JSON.stringify(your_data), cache: "no-cache", headers: new Headers({ "content-type": "application/json" }) }) const names = await response.json(); return names } let timeout = null function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; }; var debounce_key = debounce(async function(){ var selectval = $('select').val() var inputval = $('#Title').val() let data = await loadNames(selectval, inputval) $('#Title').autocomplete({ source: data }) }, 350) $("#Title").on("keyup", debounce_key)Cada vez que se escribe un carácter, habrá una cuenta regresiva de 0,35 segundos y se llevará a cabo la ruta Flask (devolviendo el nombre del libro relacionado)
Sin embargo, en casos como este:
Un usuario escribió una palabra completa sin llegar a la cuenta regresiva de 0.35 s> obtenido / get_title> json recibido en el archivo javascript> ¡no ocurre ninguna sugerencia automática!
La única forma de activar la sugerencia automática es escribir otra palabra (que usaría los últimos datos obtenidos como base para la sugerencia automática)
¿Cómo podría hacerlo cuando el usuario se detiene> 0.35 s cuenta regresiva activada> buscar> json recibido> muestra autosugerencia basada en la entrada actual.