Hirdetés

Keresés

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

  • martonx
    veterán

    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);
    }

    Nem igazán kellene megszakítanod a már futó html lekérdezést. Tegyél ki spinnert, jelezd valahogy, hogy éppen fut egy lekérdezés.
    Vaaagy oldd meg szerver oldalon, hogy egy ilyen bagatell html hívás ne tartson másodpercekig.

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