Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Opóźnienie wysłania zapytania ajax
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Jarod
Problem:
Na stronie generuję tabelę w której wyświetlam regon firmy i jej nazwę - rekordów jest dużo.
Po najechaniu na regon firmy wywoływane jest poniższe zdarzenie, które pobiera asynchronicznie dane na temat wskazanej firmy i ładuje je do odpowiedniego diva, który jest wyświetlany na zasadzie tooltipa.
Problem w tym, że jeżeli będę szybko przesuwał myszką po regonach (góra-dół-góra) to do bazy leci tak dużo zapytań, że przy niewielkiej ilości użytkowników i takich eksperymentach można zajechać serwer - obciążenie procesora 100%.

Przykładowo przesuwam szybko myszą po 200 regonach i zatrzymuje się na 201 a w divie zostaje wyświetlone 201 wyników (przeglądarka szybko wyświetla dane od 1 do 201 wyniku).

Mogę problem rozwiązać na 2 sposoby. Zrobić zdarzenie na click() albo opóźnić wysyłanie requesta.
setTimeout nie załatwia sprawy ponieważ opóźnia tylko wyświetlenie wyniku - te 201 zapytań sql zostanie i tak wykonanych.

Chcę osiągnąć:
Zapytanie ajax zostanie wykonane a dane wyświetlone jeśli użytkownik przytrzyma kursor myszy na regonie przez 1s


Dotychczasowy kod:
Kod
    $(".szczegoly_firma").mouseover(function(){
        if ($(this).html().length != 0)
        {
            var sTyp = $(this).attr("class");
            var aTyp = sTyp.split(" ");
            var sMd5 = $.md5($(this).html());
            var sRegon = $(this).html();

            setTimeout( function(){
                $.ajax({
                    type: "POST",
                    url: "daneofirmie.php",
                    cache: "false",
                    timeout: 1000,
                    data: ({ajax: sMd5, regon: sRegon, typ: aTyp[0]}),
                    success: function(tresc){
                                                $("#szczegoly_okno").empty();
                                                $("#szczegoly_okno").show();
                                                $("#szczegoly_okno").append(tresc);
                                            }
                    });
            } , 1000 );             
        }
    });


Może znajdzie się ktoś kto jest w stanie coś pomóc.
Pozdrawiam
Pawel_W
clearTimeout, może słyszałeś winksmiley.jpg

dodaj do teog mouseout
Jarod
Cytat(Pawel_W @ 21.12.2010, 23:47:02 ) *
clearTimeout, może słyszałeś winksmiley.jpg

dodaj do teog mouseout



Mam zdarzenie mouseleave() a clearTimeout nie działa.
Pawel_W
to pokaż jak próbowałeś smile.gif
Jarod
Cytat(Pawel_W @ 22.12.2010, 00:30:40 ) *
to pokaż jak próbowałeś smile.gif


Pewnie źle skoro się upierasz. Zależy mi na czasie więc może napiszesz jak użyć, zadziała i masz pomógł smile.gif
aart3k
najpierw zapytanie ajax i setTimeout w success na funkcję sprawdzającą czy użytkownik opuścił dane pole.
do tego zdarzenie ustawiające odopowiednią flagę, oznaczającą czy opuścił dane pole
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.