Autor Zpráva
slon_cz
Profil
Dobrý den, řekněme, že mám kód
<script>
var cas = 10000;
setInterval(function(){ 
alert("Hello"); 

cas = 2000;

}, cas);
</script>

a u něj potřebuji udělat, aby popvé proběhl za 10 vteřin a poté pokud mi vyjde podmínka, tak se ten timer změnil na jednou za 2 vteřiny, bohužel se mi to nedaří nastavit. Je to vůbec možné měnit časovač uvnitř functe daného intervalu? Děkuji a přeji hezký den
blaaablaaa
Profil
Použil bych místo toho spíš setTimeout.
weroro
Profil
var cas = 10000;

function startInterval(fn, time) {
    setTimeout(function() {
        fn();
        startInterval(fn, cas);
    }, time);
}

startInterval(function() {
    alert('Hello');
    
    cas = 2000;
}, cas);
slon_cz
Profil
weroro, to funguje, akorát je problém, že:
1. načte se stránka, nastaví se 10sec
2. po 10 sec se nastaví 2sec, jakmile těch 2sec uběhne, nastavím zpět 10sec, ovšem další proběhne stále ještě za 2sec a ten poté až za 10sec. Je možné, aby to další už běželo s novým časem?

Aby jste to pochopili, skrz ajax si vytahuji obsah php souboru
Načte se stránka a já potřebuji za 2sec spustit ajax volání a případný obsah .php souboru zobrazit na 8sec, poté proběhne opětovné volání a pokud je soubor prázdný, tak se inetrval sníží na 2sec, to vše funguje. Ovšem pokud se zobrazí obsah souboru, nastaví se interval na 10sec, zobrazí se obsah na 8sec, ale za 2sec se stávající obsah přepíše tím dalším, což je špatně, interval má být opět 10sec, tedy ihned, ne až u dalšího volání jestli chápete
weroro
Profil
V takom prípade stačí setTimeout nastaviť vtedy, keď dorazí odpoveď, čiže dáta toho ajax volania. Nemusí bežať permanentne.
slon_cz
Profil
Pokud nastavím ten setinterval jen pokud budu mít data z ajaxu, tak stejně ale musí probíhat nějaký setinetrval, který kontroluje, zda je něco nového, ne? Respektive potřebuji aby tam nějaký setinterval běžel a u něj se dala měnit ta délka jeho.
blaaablaaa
Profil
slon_cz:
Jak jsem psal výše, použij setTimeout a v každém volání znovu zavolej setTimeout a čas si mlžeš měnit s každým opakováním.
weroro
Profil
Ja si to predstavujem nejak takto:
function loadData() {
    var request = new XMLHttpRequest();
    request.open('POST', 'http://tvoja-url.tld', true);
    request.onload = function() {
        var time = 8000;
        if (request.status === 200) {
            // Ak prídu nejaké dáta
            // tak ešte to chce podmienku na kontrolu
            // prijatého obsahu
            time = 2000;
        }
        setTimeout(loadData, time);
    };
    request.send();
}

document.addEventListener('DOMContentLoaded', function() {
    setTimeout(loadData, 2000); // Po načítaní stránky sa za 2 sekundy spustí ajax volanie
});

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0