Új hozzászólás Aktív témák

  • Gergello

    addikt

    Sziasztok !

    Egy kis jquery kódban kérném a segítségetek.
    Van egy input text mező, amihez csináltam egy kis saját autocomplet funkciót.

    Működési elve: a szövegmező .on("input" ... eseményére csinálok egy ajax hívást, ami visszakap egy html kódrészletet és ezt kell megjeleníteni.

    Helyi teszt szerveren minden tökéletes működött, mert gyors a szerver.
    Felraktam az élesre és az a probléma, hogy a néha lassabban jön meg a válasz és ez miatt nem az utolsónak beírt (végső) input mező tartalom alapján kapott eredményt jeleníti meg, hanem az utolsónak befejeződött ajax hívás eredményét.

    Pl. begépeled, hogy "szerszámkészlet" szépen futnak a hívások, de előfordul, hogy legvégül csak a "szerszámk" keresőszó alapján kapott találatokat jeleníti meg. Hiába látom azt a Chrome Network fülben, hogy az utolsónak küldött ajaxban a "szerszámkészl" adatot küldte el a feldolgozó(válaszadó) résznek.

    Szerintetek, hogy oldjam meg ?
    Szerintem minden ajax hívásban meg kellene szakítani a korábban indított ugyanilyen hívást. De hogy ? Nagyon köszönöm.

    Kód:

    $('#product_search').on("input", function() {
            doSearch();
        });

    function doSearch() {
        $search_string = $('#product_search').val();
        
        if ($search_is_first_submit || (!$search_is_first_submit && $search_string != $last_search_string)) {
            $.ajax({
                url: 'index.php?route=product/search/searchhint',
                type: 'post',
                data: 'search=' + $search_string,
                dataType: 'json',
                success: function(json) {
                    if (json['success']) {
                        $('#search-hint').html(json['success_text']);
                    }    
                }
            });
        }
        
        $last_search_string = $search_string;
        $search_is_first_submit = false;
    }
    function showSearchHint() {
        doSearch();
        
        $('#search-hint').removeClass('d-none');
    }
    function hideSearchHint() {
        setTimeout(function () {
            // Things to do before the focus is out
            $('#search-hint').addClass('d-none');
        }, 150);
    }

Új hozzászólás Aktív témák