Autor Zpráva
Peet
Profil
měl bych otázku jak by se dalo udělat to, že když najedu nad daný element aby se spustil ajax až po nějaké době např 3s.

myslel jsem že by to šlo podobně jako s animacemi při najetí počká při odjetí se stopne.

ale nevím jak stopnout ajax..

předem díky POUŽÍVÁM JQUERY
Suta
Profil
Třeba takto (příklad dělá přesně to, co požaduješ). Jen důrazně varuji před jeho přesným aplikováním (použití onmouseover a onmouseout), jinak server zahltíš a uděláš si všude (prohlížeč, server, uživatel) mnoho nepřátel. Zkus místo najetí vymyslet jiný šetrnější spouštěč, ajax není "animace".


// proměnná uchovávající spuštěný časovač
var setTimeout_ajaxMouseover = null;

 // odkaz na spuštěný požadavek
var myXhr;

 // zrušení aktivního (minulého) požadavku na server
stopAjax = function() {

     // zrušení spojení (pokud existuje a není dokončeno)
    if(myXhr && myXhr.readyState != 4) {
        try{ myXhr.abort(); } catch(ex){} // try-catch z důvodu vypisování chyby do konzole v některých prohlížečích
    }
}

 // spuštění požadavku na server
startAjax = function() {

       stopAjax();

       myXhr = $.ajax({
          // zasílané parametry
    })
}

 // spuštění "odpočítávání" do spuštění požadavku na server
element.onmouseover = function() {

      // zrušení minulého časovače
    window.clearTimeout(setTimeout_ajaxMouseover);

      // spuštění časovače (3 vteřiny)
    setTimeout_ajaxMouseover = window.setTimeout(function(){
    
           startAjax();
    },3000)
}

 // zrušení časovače
element.onmouseout = function() {

      window.clearTimeout(setTimeout_ajaxMouseover);
}
Peet
Profil
Dobře děkuji :D sice asi chápu maximální minimum tohoto kódu ale snad ho časem pochopim. na webu mám celkem dost věcí kde se ajax spouští najetím myši.

proč si myslíte že je to tak špatné.?
Suta
Profil
Peet:
Na spuštění ajaxového požadavku samozřejmě může být použita událost najetí myši na prvek ve stránce. Psal jsem o přesném aplikování mého příkladu, kde není ošetření na zastavení "zrušení minulého a start nového požadavku" v situaci, kdy minulý požadavek dosud není dokončen. Pak bude docházet k situacím, kdy při opětovném najetí na prvek po odstartování požadavku (po uběhnutí 3 vteřin, během kterých kurzor vydržel nad daným elementem) bude probíhající požadavek zrušen a spuštěn nový.

Minimalizaci požadavku ale na druhou stranu částečně řeší onen 3 vteřinový časovač, takže tak kritické jako použití mouseout bez intervalu to není.

Kdybys příklad aplikoval a chtěl ošetření o kterém píšu, napiš, ať nevytvářím kód zbytečně.

Poslední úprava kódu: 21.12.2011 0:19
Peet
Profil
dobře pokusím se ho v průběhu času nějak pochopit kousek po kousku.. javascript jako takový přímo moc neumím používám spíše jquery ale každopádně děkuji :) kdyby něco tak napíšu :)
_es
Profil
Peet:
javascript jako takový přímo moc neumím používám spíše jquery
Časté potíže, zajímavosti a poučné debaty » Co vlastně je jQuery?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0