Autor Zpráva
Kendy Bojler
Profil
Dobrý den,
při práci na svém webu jsem narazil na problém. Při práci požívám pouze HTML, CSS a PHP, o JavaScriptu nic moc nevím, proto pokládám tento dotaz.

Mám na stránkách odstavec p, ve kterém je vypsáno číslo z databáze. Pokud bych mohl požádat, potřeboval bych návod, v případě dobrého srdce celý script :D, jak zařídit, aby se každou vteřinu toto číslo vytáhlo z databáze znovu, a vepsalo se do odstavce bez reloadu stránky.

Za všechny odpovědi a rady předem děkuji.
Someone
Profil
<html>
    <head>
        <script>
            function reloadOdstavce(id) {
                var http  = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHttp");
                if (http) {
                    http.open("GET","ajax.php?getNumber",true);
                    http.onreadystatechange = function() {
                        if (http.readyState == 4 && http.status == 200) {
                            document.getElementById(id).innerHTML = http.responseText;
                        }
                    }
                    http.send(null);
                }
            }
            window.onload = function() {
                reloadOdstavce("mujOdstavec");
                setInterval(function(){
                    reloadOdstavce("mujOdstavec");
                },1000);
            }
        </script>
    </head>
    <body>
        <p id="mujOdstavec"></p>
    </body>
</html>

SOUBOR AJAX.PHP

<?php
    if (isset($_GET['getNumber'])) {
        // dotaz na získání čísla
        
        echo $cislo;
    }
?>

Snad jsem se někde neupsal. Musím doporučit nastudovat javascript, protože až se objeví nějaký další problém z této oblasti nikdo Vám to tu takhle celé pod nos nenaservíruje. I ode mne je to vyjímečné.
Kendy Bojler
Profil
Velice děkuji za odpověď.
Myslel jsem, že zkopírování tohoto kódu s doplněním jednoho dotazu nebude nic co bych nezvládl. Nyní si však připadám dost trapně.
Nevím co jsem mohl pokazit, ale číslo se bohužel nezobrazuje. Mohl bych požádat o chvilku Vašeho času abyste mi pomohl zjisti kde dělám chybu?
Velice děkuji.
pcmanik
Profil
Kendy Bojler:
Do getElementById ste namiesto id dali id daného paragrafu?
panther
Profil
pcmanik:
tam to id je dobře - je to parametr té funkce. Při volání je tam správné ID odstavce (v ukázce zde uvedené).

Kendy Bojler:
dodej odkaz na stránku, kde je tvé dílo k vidění.
Kendy Bojler
Profil
Děkuji za odpověď.
Skript jsem upravil dle vašich rad, bohužel, stále přetrvává stejný problém.
Mohl bych poprosit o radu?

<head>
        <script>
            function reloadOdstavce(id) {
                var http  = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHttp");
                if (http) {
                    http.open("GET","ajax.php?getNumber",true);
                    http.onreadystatechange = function() {
                        if (http.readyState == 7 && http.status == 200) {
                            document.getElementsById(id).innerHTML = http.responseText;
                        }
                    }
                    http.send(null);
                }
            }
            window.onload = function() {
                reloadOdstavce("mujOdstavec");
                setInterval(function(){
                    reloadOdstavce("mujOdstavec");
                },1000);
            }
        </script>
    </head>
    <body>
 <p id="mujOdstavec"></p>
    </body>
</html>

Soubor: ajax.php

<?php
include "pripojenikdatabazi.php";
mysql_query("SET CHARACTER SET cp1250");
$cook=($_COOKIE["prihlaseny"]);
?>

<?php
    if (isset($_GET['getNumber'])) {
$vysledek=mysql_query("SELECT `kredit` 
FROM `wenom_cz_main`.`clenove` 
WHERE `email` = '$cook' 
LIMIT 0 , 1 ");
$zaznam=MySQL_Fetch_Array($vysledek);
$cislo=$zaznam["kredit"];
echo $cislo;
    }
?>

<?php
include "odpojenioddatabaze.php";
?>

Omlouvám se, že neuvádím odkaz na stránky, ale chtěl bych je nechat v anonymitě.
Someone
Profil
Ah, tady je :D, omluvám se, asi jsem v době psaní scriptu myslel na něco jiného. Podmínka má samozřejmě vypadat takto
if (http.readyState == 4 && http.status == 200) {}
Teď to snad půjde bez problému, ještě jednou se omlouvám.
upravil jsem i v původním scriptu
Kendy Bojler
Profil
Hlavička má tedy vypadat takto?

<
<script>
            function reloadOdstavce(id) {
                var http  = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHttp");
                if (http) {
                    http.open("GET","ajax.php?getNumber",true);
                    http.onreadystatechange = function() {
                        if (http.readyState == 4 && http.status == 200) {
                            document.getElementsById(id).innerHTML = http.responseText;
                        }
                    }
                    http.send(null);
                }
            }
            window.onload = function() {
                reloadOdstavce("mujOdstavec");
                setInterval(function(){
                    reloadOdstavce("mujOdstavec");
                },1000);
            }
        </script

Je mi to sice opravdu trapné, ale pořád mi to nejde ... :D
Someone
Profil
Ano, místo 7 tam je 4.


Další věc, které jsem si nevšiml: document.getElementsById(id).innerHTML = http.responseText; stačí odmazat to S.
Tentokrát jsem si to pro jistotu vyzkoušel i na serveru a mělo bý to být vše.
Kendy Bojler
Profil
Mockrát Vám děkuji za Vaši ochotu a pomoc. Velice si vážím takových lidí jako jste Vy.
S pozdravem: Kendy Bojler
Chamurappi
Profil
Reaguji na Someone:
var http = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHttp");
S údivem pozoruji snahy o zkrácení inicializace XMLHttpRequestu… jak myslíš, že zareaguje prohlížeč, který první variantu nepodporuje?
_es
Profil
Kendy Bojler:
jak zařídit, aby se každou vteřinu toto číslo vytáhlo z databáze znovu, a vepsalo se do odstavce bez reloadu stránky.
Zamyslel si sa nad tým, či to je dobrý nápad?
Kendy Bojler
Profil
Zdravím, chtěl bych se ještě zeptat,
jak by se prosím Vás dalo zařídit, aby se toto číslo zobrazovalo na stránce na dvou místech najednou?
Velice děkuji za reakce.
Kendy Bojler
Profil
Zdravím ještě jednou,
měl bych ještě jeden problém ... jak musím upravit kód do IE, aby fungoval?
Do kódu jsem napsal:
<?php
if (ereg(".*MSIE*", $_SERVER['HTTP_USER_AGENT'])) {
echo ('<script>
            function reloadOdstavce(id) {
                var http  = new ActiveXObject("Microsoft.XMLHttp");
                if (http) {
                    http.open("GET","ajax.php?getNumber",true);
                    http.onreadystatechange = function() {
                        if (http.readyState == 4 && http.status == 200) {
                            document.getElementById(id).innerHTML = http.responseText;
                        }
                    }
                    http.send(null);
                }
            }
            window.onload = function() {
                reloadOdstavce("mujOdstavec");
                setInterval(function(){
                    reloadOdstavce("mujOdstavec");
                },2000);
            }
        </script>');
}
else {
echo ('<script>
            function reloadOdstavce(id) {
                var http  = new XMLHttpRequest();
                if (http) {
                    http.open("GET","ajax.php?getNumber",true);
                    http.onreadystatechange = function() {
                        if (http.readyState == 4 && http.status == 200) {
                            document.getElementById(id).innerHTML = http.responseText;
                        }
                    }
                    http.send(null);
                }
            }
            window.onload = function() {
                reloadOdstavce("mujOdstavec");
                setInterval(function(){
                    reloadOdstavce("mujOdstavec");
                },2000);
            }
        </script>');
};
?>
ovšem v IE to stále nefunguje. Můžete mi poradit?
Děkuji, Kendy Bojler
Davex
Profil
V Exploreru 7 a 8 to funguje.

Jinak servírovat různé skripty podle User Agenta je hodně špatné řešení. Použij raději funkci pro AJAX od Chamurappiho.
Kendy Bojler
Profil
A pokud používám IE9 ... ?
Děkuji.
Kendy Bojler
Profil
Proč vlastně tenhle script v IE9 nefunguje a místo toho se zobrazuje prázdné místo?
Poprosil bych tedy o radu jak kód zprovoznit i v IE9.
Děkuji velice.
Davex
Profil
V jiném prohlížeči to funguje? Nechybí element s id="mujOdstavec"? Když se přepneš do vývojářských nástrojů F12, tak jsou nějaké chyby v konzoli?
Kendy Bojler
Profil
Funguje to v Opeře, Mozile a Chromu, ale v IE to nejde v žádné verzi ... ano <div id="mujOdstavec"> zde mám, v konzoli žádné chyby nejsou.
Tušíte co může být špatně?
Děkuji, Kendy Bojler
Davex
Profil
Pokud není vypnutý JavaScript, tak už vážně netuším, protože mi to funguje i v devítce.
_es
Profil
Kendy Bojler:
Tušíte co může být špatně?
Je to celé zle, radu pre správne riešenie si dostal ([#15] Davex). V IE môže byť trebárs vypnutá podpora pre ActiveXObject("Microsoft.XMLHttp") a potom to samozrejme funkčné nebude. Alebo prehliadač či sieť nestíha nezmyselné tempo 30 HTTP dotazov za minútu.

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