Autor Zpráva
leorond
Profil
Ahoj, nevím zda píšu do správné sekce ale vzhledem k tomu co potřebuji hádám že JS bude to co hledám.

Potřeboval bych něco co mi vloží zápis do databáze bez obnovení stránky, něco jako je třeba "To se mi líbí" na facebooku kdy po kliknutí se přičte hodnota, změní odkaz a neobnoví se stránka.

Mohl by jste mi někdo pomoci nebo nasměrovat správným směrem? Když totiž zadám něco s Like button nebo něco co obsahuje trošku zmínku o hodnocení obsahu tak se dostanu k hnusnému a pro mne nepotřebnému facebook like button.

Děkuji za pomoc


Jelikož zatím využívám metodu $_GET kdy změním databázi a vrátím se zpět pomocí header('location: javascript:self.history.back();', true, 303);, což asi nebude nejlepší cesta že?
Keeehi
Profil
AJAX
leorond
Profil
Keeehi:

Děkuji to bude přesně to co hledám :)

Jen tomu úplně nerozumím a nevím zda to dokážu uvést do provozu, tak to zkusím a případně se v tomto tématu ještě na pár věcí optám.


Tak dejme tomu že budu mít takovýto JS a budu přes něj chtít volat PHP script uložený někde na webových stránkách.

        function ajax(url, callback) {
              var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
              xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) callback(xhr.responseText);
              };
              xhr.open('GET', url);
              xhr.send();
            }

Budu mít takovýto button

<button onclick="ajax('dir-', function(data) { alert(data); })">Načíst</button>

Nyní to volá alert a jak to upravit aby to zavolalo script který já potřebuji?


Takže pokud jsem to pochopil správně to odesílání ajaxem tak by to mohlo být třeba takto že?

        <script type="text/javascript">
        function poslat(){
        var ajax = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
        if(!ajax){
        alert("Tak tady to nepoběží!");
        return true;
        }
        ajax.onreadystatechange= function () {zpracuj(ajax); }; 
        //metoda GET
        ajax.open("GET", "/vyvoj/md5.php?like="+document.form0.text.value, true);
        ajax.send(null);

        return false
        }
        function zpracuj(ajax){
        var txt;
        if (ajax.readyState == 4){ //bylo odpovězeno
        if(ajax.status == 200  || ajax.status==0){
        txt=ajax.responseText;
//        document.getElementById("md5").innerHTML = " = " + txt;
        }
        else alert("Chyba: "+ ajax.status +":"+ ajax.statusText);
        }
        }
        </script>

        <form name="form0" method="get" action="/vyvoj/md5.php">
        <input type="hidden" name="text" value="4"></input>
        <span id="md5"></span>
        <input type="submit" onclick="return poslat()" value="LIKE"></input>
        </form>



Ted tedy jsem ještě řádku 20 upravil tak aby házela jen zprávy z php skriptu na

document.getElementById("md5").innerHTML = txt;

a vše funguje ale ještě mi zbývá udělat aby se měnil odkaz z "To se mi líbí" na "Tento článek se mi líbí"
leorond
Profil
Jasný už to mám, prostě tu řádku 20 upravím takto

 document.getElementById("md5").innerHTML = "Tento článek se mi líbí" + txt;

a do spanu dám

<span id="md5">To se mi líbí</span>

ve skriptu to udělám podmínku pro ten formulář a je to hotové


Keeehi: Děkuji za nasměrování správným směrem ;) hned jak tady udělají nějaký LIKE button tak máš palec hore :D


Ha a jak pošlu více parametrů?

zkoušel jsem toto ale bez úspěchu

ajax.open("GET", "/stranka/like.php?like="+document.form_like.text.value+"?user="+document.form_like.user.value, true);



Jo už to mám v druhém parametru musí být místo otazníku & takže to bude takto

ajax.open("GET", "/stranka/like.php?like="+document.form_like.text.value+"&user="+document.form_like.user.value, true);

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: