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