Autor Zpráva
Pinqui
Profil
DObrý den. četl jsem si článek viz:
http://php.vrana.cz/odeslani-formulare-pres-ajax.php?new=8643#new

Popisuje použití ajaxu tímto kódem:
<script type="text/javascript">
/** Odeslání formuláře přes XMLHttp požadavek
* @param function state_change funkce zajišťující obsluhu při změně stavu požadavku, dostane parametr s XMLHttp objektem
* @param string url URL požadavku
* @param object form formulář k odeslání
* @param object [headers] předané hlavičky ve tvaru { 'hlavička': 'obsah' }
* @return boolean true v případě úspěchu, false jinak
* @copyright Jakub Vrána, http://php.vrana.cz
*/
function post_xmlhttprequest(state_change, url, form, headers) {
    var elements = form.elements;
    var content = [];
    for (var i=0; i < elements.length; i++) {
        if (elements[i].attributes.name && elements[i].attributes.name.specified && !elements[i].disabled) {
            if (/^(select)$/i.test(elements[i].tagName)) {
                var options = elements[i].options;
                for (var j=0; j < options.length; j++) {
                    if (options[j].selected) {
                        var value = (options[j].attributes.value && options[j].attributes.value.specified ? options[j].value : options[j].text);
                        content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(value));
                    }
                }
            } else if (!/^(submit|reset|button|file|image)$/i.test(elements[i].type) && (!/^(radio|checkbox)$/i.test(elements[i].type) || elements[i].checked)) {
                content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(elements[i].value));
            }
        }
    }
    if (!headers) {
        headers = {};
    }
    headers['Content-Type'] = 'application/x-www-form-urlencoded';
    return send_xmlhttprequest(state_change, 'POST', url, content.join('&'), headers);
}
</script>


a aby uživatel viděl zda se něco děje připojeil další kód:
<script type="text/javascript">
function odeslat(form) {
    document.getElementById('stav').innerHTML = 'Odesílá se.';
    return post_xmlhttprequest(function (xmlhttp) {
        if (xmlhttp.readyState == 4) {
            document.getElementById('stav').innerHTML = 'Odesláno.';
        }
    }, 'odeslat.php', form);
}
</script>


+ začal s formulářem:

<span id="stav"></span>
<form action="" method="post" onsubmit="return !odeslat(this);">


Nějak ale prostě nevím, jak by měl vypadat soubor (hlavně formulář) třeba s jedním inputem, selectem a jedním checkboxem, aby když se klikne na odeslat, tak se uživateli opravdu zobrazilo co se děje a přitom se data odeslala do souboru test.php.
Můžete mi to prosím někdo trochu osvětlit? Na jeho diskusi jsem psal, ovšem odpověď žádná děkuji.
Chamurappi
Profil
Reaguji na Pinquiho:
Prosím o odkaz na živou ukázku. Zajímalo by mě, proč o ni musím vždy prosit (často i několikrát ty samé lidi).
Pinqui
Profil
Chamurappi
http://superpokec.cz/try/form.php

kód html vidíš když klikneš na zdrojový kód.. kód test.php:
<?php
$vypis="";
if(isset($_POST["text"])){
$vypis .= $_POST["text"];
}
if(isset($_POST["checkbox"]) && $_POST["checkbox"] == "on"){
$vypis .= "&nbsp;Checkbox byl zaškrtnut";
}
if(isset($_POST["select"])){
$vypis .= "&nbsp;$_POST[select]";
}

$db = MyDB::_();
$db->set_charset('utf8');

$db->query("INSERT INTO testik (text) VALUES ('$vypis')")
?>
Chamurappi
Profil
Reaguji na Pinquiho:
Funkci send_xmlhttprequest, kterou voláš z post_xmlhttprequest, máš kde?
Asi by sis ji měl vzít odtud.
Pinqui
Profil
Chamurappi
Aha tak to jo díky.. A když bych chtěl, aby se mi po odeslání text v inputu smazal tak dá? a jestli tak jak se to udělat??
Chamurappi
Profil
Reaguji na Pinquiho:
aby se mi po odeslání text v inputu smazal tak dá?
Dá.

a jestli tak jak se to udělat??
Udělat se to tak, že projdeš kolekci elements podobným cyklem, jako ji prochází post_xmlhttprequest, ale místo zjišťování a ukládání hodnot nastavíš všemu něco.value na něco.defaultValue.
Pinqui
Profil
Chamurappi
A když bych chtěl jen tomu jednomu inputu s typem text, nedá se to vepsat jen do stávajícího kódu?
Třebaže by se tomu inputu dalo id nebo tak nějak??
Chamurappi
Profil
Reaguji na Pinquiho:
nedá se to vepsat jen do stávajícího kódu?
Dá.

Třebaže by se tomu inputu dalo id nebo tak nějak??
Klidně i podle jména. Tam, kde nastavuješ zobrazení „Odesláno.“, přidej form.jméno.value = form.jméno.defaultValue a máš hotovo…
Pinqui
Profil
Chamurappi
Díky moc :-)
Pinqui
Profil
Chamurappi
Ještě taková maličkost.. u selectu by se to napsalo stejnětak nebo jinak??
Chamurappi
Profil
Reaguji na Pinquiho:
Zkus to stejně a uvidíš, jestli to pojede. Myslím, že by mohlo. (A jsem si jist, že je rychlejší to zkusit než se zeptat.)
Pinqui
Profil
Chamurappi
Mno právě nevím zda to píšu dobře.. když nebudu mít zaškrtnutý checkbox chci aby se to nastavilo an defaultní hodnotu.. napsal jsem to takto:
            if(!form.checkbox.checked){
            form.select.value = form.select.defaultValue;
            }

ale nějako to nefunguje.
viz:
http://superpokec.cz/try/form.php
Pinqui
Profil
Vyřešeno:
            if(!form.visp.checked){
            form.nick.selectedIndex = 'value1'; //value1 - první hodnota, nebo ta kterou chceme defaultní
            }

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0