Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] Opóźnienie wysłania zapytania ajax
Jarod
post 21.12.2010, 23:38:35
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
Pawel_W
post 21.12.2010, 23:47:02
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


clearTimeout, może słyszałeś winksmiley.jpg

dodaj do teog mouseout
Go to the top of the page
+Quote Post
Jarod
post 21.12.2010, 23:57:09
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
Pawel_W
post 22.12.2010, 00:30:40
Post #4





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


to pokaż jak próbowałeś smile.gif
Go to the top of the page
+Quote Post
Jarod
post 22.12.2010, 00:33:39
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
aart3k
post 22.12.2010, 12:43:22
Post #6





Grupa: Zarejestrowani
Postów: 72
Pomógł: 10
Dołączył: 2.02.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.07.2025 - 10:48