Autor Zpráva
johnl
Profil
Je normální že když v použiji třeba
setTimeout('ajax();', 9000); //což má každých devět sekund spouštět ajaxovou funkci
tak se to zrychluje až se funkce provádí třeba i 2x za sekundu.? Nebo je to chybným kódem..?
Chamurappi
Profil
Reaguji na johnla:
Je normální […]
Ne.

Nebo je to chybným kódem..?
Ano. Nejspíš ten setTimeout voláš víckrát, než si myslíš.

Jestli to dělají i jiné prohlížeče jsem nezkoušel..
Tak proč píšeš o Opeře?
johnl
Profil
Chamurappi:
Tak proč píšeš o Opeře?
Protože vím, že právě v Opeře mi to blbne a je to hodně znát.. Začne se po chvilce sekat, v chrome jsem to třeba nespozoroval..

Níže je kód který používám na stahování chatu přes ajax, nevěděl by někdo jak to uprait aby to nedělalo.?

function chat()
{

    var kam = "chat";
    var stranka = "chat.php";
    var httpRequest;
    
    if(typeof window.ActiveXObject != 'undefined')
    {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {  
        httpRequest = new XMLHttpRequest();
    }
    httpRequest.open("GET", stranka, true);
    httpRequest.onreadystatechange= function () 
    {
        processRequest(httpRequest, kam) 
    };
    httpRequest.send(null);
}


function processRequest(httpRequest, kam) 
{
    if (httpRequest.readyState == 4)
    {
        if(httpRequest.status == 200)
        {
            if (typeof kam == 'string') 
            {
                
            document.getElementById(kam).innerHTML = httpRequest.responseText;
                
                
            setTimeout('chat();', 9000);
            }
        }
    }
      
}
v HTML pak jen volám funkci chat();
_es
Profil
johnl:
což má každých devět sekund spouštět ajaxovou funkci
Tento kód spustí funkciu ajax za 9 sekúnd. Ak nastáva nejaké opakovanie, tak to robí okolitý kód.
Ak chceš niečo spúšťať opakovane, môžeš použiť aj metódu setInterval.
Ten tvoj kód je navyše nedoporučovaný.
Chamurappi
Profil
Reaguji na johnla:
nevěděl by někdo jak to uprait aby to nedělalo
Ten kód je v pořádku.
Proč sem dáváš jen malý kousíček kódu a zcela zbytečnou informaci o jednom prohlížeči?

v HTML pak jen volám funkci chat();
Jen jednou? Na jednom místě?
johnl
Profil
_es:
Ten kód jsem stáhnul z internetu.. S javascriptem moc neumím..
Teď když jsem nahradil setTimeout tím setInterval tak to vypadá že se to nezrychluje..

Ten tvoj kód je navyše nedoporučovaný.
Co tím myslíš.? Z toho odkazu jsem moc nepochopil.. :-/

Chamurappi:
Proč sem dáváš jen malý kousíček kódu a zcela zbytečnou informaci o jednom prohlížeči?
Já bych řekl že je to podstatná část kódu, zbytek už je jen HTML stránka a JS už žádný..

Jen jednou? Na jednom místě?
Ano, pod divem do kterého chci aby se to vypsalo.. Jinak nikde..

zcela zbytečnou informaci o jednom prohlížeči
Omlouvám se, změním titulek na „zrychlují se setTimeout„ je pravda že to nedělalo jen v Opeře, ale jinde jsem to nezkoušel tak proto jsem to tak napsal..
Chamurappi
Profil
Reaguji na johnla:
Já bych řekl že je to podstatná část kódu, zbytek už je jen HTML stránka a JS už žádný..
Pokud ten uvedený kód vezmu, dám si ho do své stránky a tu pak vyzkouším v Opeře, budu také pozorovat zrychlování? Vsadíme se … třeba o játra, OK?
_es
Profil
johnl:
Ten kód jsem stáhnul z internetu.. S javascriptem moc neumím..
Z toho odkazu jsem moc nepochopil.. :-/
Tak skús stiahnuť nejaký iný kód, ktorý nebude mať vo volaní setTimeout alebo setInterval textový reťazec, tak, ako to je jednoducho popísané v tom odkaze.

Teď když jsem nahradil setTimeout tím setInterval tak to vypadá že se to nezrychluje..
Nahradil akým spôsobom?
Dúfam, že nie tak, že si len všetky výskyty setTimeout v kóde zmenil na setInterval?
johnl
Profil
Chamurappi:
Já nechci nic tvrdit, JS vážně nerozumím, ale pochybuju že by to způsoboval kód na odeslání který s tím nemá nic společného a nebo kód na vkládání smajlíků do textarey…
johnl
Profil
_es:
Dúfam, že nie tak, že si len všetky výskyty setTimeout v kóde zmenil na setInterval?
Nee, z té funkce jsem to vyškrtnul úplně a dal jsem to přímo do stránky..
Chamurappi
Profil
Reaguji na johnla:
Já nechci nic tvrdit, JS vážně nerozumím
Já nerozumím transplantacím, a přesto bych byl schopen vyhrát zánovní játra. Mnohem užitečnější postup, než milionkrát zopakované škemrání o odkaz na živou ukázku.

pochybuju že by to způsoboval kód na odeslání který s tím nemá nic společného
Nevolá se z něj chat()?
johnl
Profil
Chamurappi:
Nevolá se z něj chat()?
Právě že ne..

Jak píšu, nahradil jsem ti tím setInterval a jde to bez problému..
Chamurappi
Profil
Reaguji na johnla:
Ale neznáme příčinu. Prosím o odkaz na živou ukázku.
johnl
Profil
Chamurappi:
Nemám to nikde na internetu, jenom v PC..

Tady je celý soubor chat.js

function chat()
{

    var kam = "chat";
    var stranka = "chat.php";
    var httpRequest;
    
    if(typeof window.ActiveXObject != 'undefined')
    {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {  
        httpRequest = new XMLHttpRequest();
    }
    httpRequest.open("GET", stranka, true);
    httpRequest.onreadystatechange= function () 
    {
        processRequest(httpRequest, kam) 
    };
    httpRequest.send(null);
}


function processRequest(httpRequest, kam) 
{
    if (httpRequest.readyState == 4)
    {
        if(httpRequest.status == 200)
        {
            if (typeof kam == 'string') 
            {
                
            document.getElementById(kam).innerHTML = httpRequest.responseText;
                
                
            setTimeout('chat();', 9000);
            }
        }
    }
      
}

function poslat(){
var co = document.form.text.value;

var co = co.replace("&", "[amp]");

var ajax = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
if(!ajax){
alert("Tak tady to nepoběží!");
return false;
}


ajax.onreadystatechange= function () {zpracuj(ajax); } ;

ajax.open("GET", "chat.php?text="+co, true);
ajax.send(null);

return false;
}

function zpracuj(ajax){
document.form.text.value="";
var txt;
if (ajax.readyState == 4){
if(ajax.status == 200 || ajax.status==0){
txt=ajax.responseText;
}
}
}

A HTML:

<div style="width: 621px; border: 1px solid #222; overflow: hidden;">
<div id="chat" style="width: 610px; margin: 0 auto; padding-top: 5px;"></div>
</div>
<script src="sc/javascript/chat.js"></script>
<script>
chat();
</script>

takhle to vypadalo než jsem vyškrtl to setTimeout('chat();', 9000); z funkce a v HTML nenahradil chat(); tímto:
chat();
setInterval("chat();", 9000);
Chamurappi
Profil
Reaguji na johnla:
Nic mě nenapadá.
Jak jsi zjišťoval, že dochází ke zrychlování?
johnl
Profil
Chamurappi:
Jak jsi zjišťoval, že dochází ke zrychlování?
Když jsem načtený text označil myší hned při načtení, tak zůstal označený asi těch devět sekund, a tak se to zkracovalo až jsem text označil a během půl sekundy označení zmizelo.. Navíc se Opera začala sekat a měl jsem značně zpomalený internet..

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