| | |
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 |
Nazdarek. Snazim sa urobit si script na kontrolu input formulara pomocou Ajaxu. data by mali byt odoslane cez POST. Môj script vyzera nejako takto:
html:
Kód: <script type="text/javascript"> function showHint(str) { if (str.length==0) { document.getElementById("txtHint").innerHTML=""; return; } if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var XMLRes = xmlhttp.responseXML;
//čtu dokument, jelikož je vše ok :-)
xmlRoot = XMLRes.documentElement; stav = xmlRoot.getElementsByTagName("stav").firstChild.data;
document.getElementById("txtHint").innerHTML= stav; } }
xmlhttp.open("POST","zpracuj.php",true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.send(); } </script>
<h3>Start typing a name in the input field below:</h3> <form action="#" method="post"> Meno: <input type="text" id="txt1" onkeyup="showHint(this.value)" /> </form> <p>Odpoveď: <span id="txtHint"></span></p> zpracuj.phpKód: <?php
$q=$_POST["q"];
//lookup all hints from array if length of q>0 if (strlen($q) < 5) {
$hodnota1="Zadali ste malo pismen"; }
elseif (strlen($q) > 10) {
$hodnota1="Zadali ste Veľa pismen"; } else {
$hodnota1="Meno je v poriadku"; }
header("Content-Type: text/xml");
$xml = new DOMDocument("1.0","utf-8");
$validace = $xml->createElement("validace"); $xml->appendChild($validace); $vysledek = $xml->createElement("vysledek");
$stav = $xml->createElement("stav"); $stavData = $xml->createTextNode($hodnota1); $stav->appendChild($stavData);
$vysledek->appendChild($stav); $validace->appendChild($vysledek); //uložím XML výstup $vystup= $xml->saveXML(); //zobrazím echo $vystup; ?>
Lenze ono mi to nefunguje. Nevypise mi to ziadnu odpoved..Prosim Vas, kde mam chybu, alebo ako to ma byt spravne zapisane??
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 22.08.2010 11:53 | |
|
Kód: stav = xmlRoot.getElementsByTagName("stav").firstChild.data; getElementsByTagName vracia kolekciu elementov, nie jeden konkretny element. Preto nemozes vybrat z kolekcie elementov firstChild. Kód: stav = xmlRoot.getElementsByTagName("stav")[0].firstChild.data;
Nabuduce skus poslat aj odkaz na zivu ukazku.
|
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 22.08.2010 12:22 | |
|
Ďuri.. Ja som to takto mal..Takyto tvar ako si napisal.. Lenze ono je to problem v tom, ze ak mam takyto zapis, tak mi to stale vypise len prvu hlasku/odpoved..Cize v mojom pripade:
Kód: $hodnota1="Zadali ste malo pismen";
Bez ohladu na to, ci je tvar Mena spravny alebo nie. Na stranke mam iba ten script, co je tu.. Nic ine... Ja som vychadzal totiz z tohto clanku:
ajax-7-lekce
|
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 22.08.2010 14:41 | |
|
Uz som to vyriesil. Ja som "zabudol" zadat parametre do xmlhttp.send();
Cize to malo vyzerat nejako takto:
Kód: function showHint(str) { var params="pokus="+encodeURI(document.getElementById("meno").value);
... pokracovanie kodu ...
xmlhttp.send(params); }
Tak ale mam este jednu otazku. Totiz..Vsade kde citam nejaky tutorial k Ajaxu, tak je napisane, ze treba mat na zreteli to, ze uzivatel môze mat vypnuty JS. A preto treba mat osetreny script tak, aby sa vykonal aj ked je JS vypnuty. Ale nikde som sa nestretol s nejakou konkretnou ukazkou, resp. s prikladom, kde by to bolo nejako dobre rozpisane. Preto ma zaujima ako napr. osetrit registr. formular. Napr. vyvolanie Ajaxovej funkcie po stlaceni tlacitka (submit) pri zapnutom JS a v pripade vypnuteho JS spracovanie cez PHP? A ten Submit mam riesit nejakou podmienkou? alebo ako na to ?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 22.08.2010 14:56 | |
|
Vytvoris najprv stranku bez Javascriptu, formular sa bude klasicky odosielat. Potom das formularu Kód: onsubmit="spracovanie_celeho_odoslania_ajaxom(); return false;" Tym return false zabezpecis, aby sa formular neodosielal.
Ta praca s Ajaxom sa samozrejme nemusi viazat len na submit formulara.
|
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 22.08.2010 18:22 | |
|
Takze ak som to spravne pochopil, tak budem vlastne vytvarat 2x script?? Tzn. V jednom scripte formular. php (v tom kde mam formular) ho spracujem klasicky cez php a potom si este vytvorim druhy script spracuj.php, kde bude spracovany pomocou Ajaxu?? Spravne to chapem?? Cize v podstate to iste, len "vystup" bude vyzerat trocha inac??
A este dalsia otazka. Ako zabezpecit formular pred "podvrhnutim falosneho formulara" v pripade pouzitia Ajaxu?? Totiz pri klasickom PHP pouziti to vyriesim pomocou tokenu. A na zaciatku overim podmienku ci sa tokeny zhoduju. Ale ako overit token z formulara s tokenom v externom scripte(ak token bude pri kazdom reolade stranky iny), ktory bude spracovavat Ajax??
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 22.08.2010 18:38 | |
|
A nemozes Ajaxom volat tiez formular.php?
Zabezpecenie bude presne take iste. Teda, neviem ako presne to riesis, ale vsak princip je ten isty pri odoslani formulara aj pri Ajaxe - vytvori sa POST request, ktorym sa odosielaju nejake data, server spracuje PHP skript a vrati nejaky vystup (pri odoslani formulara je to obsah nacitanej stranky, pri Ajaxe responseText).
|
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 22.08.2010 19:02 | |
|
No to by som rad takto riesil..Ale neviem ako presne to zapisat. Teda to "Ajaxove volanie" na ten isty script. Teraz môj script vyzera nejako takto:
formular.php:
Kód: <script type="text/javascript"> function showHint(str) {
var params = "meno=" + encodeURI(document.getElementById("meno").value)+ "&heslo=" + encodeURI(document.getElementById("heslo").value);
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var XMLRes = xmlhttp.responseXML;
xmlRoot = XMLRes.documentElement; menoP = xmlRoot.getElementsByTagName("menoE")[0].firstChild.data; hesloP = xmlRoot.getElementsByTagName("hesloE")[0].firstChild.data; document.getElementById("menoSprava").innerHTML= "<span class='echoForm'>" + menoP + "</span>"; document.getElementById("hesloSprava").innerHTML= "<span class='echoForm'>" + hesloP + "</span>";
} } xmlhttp.open("POST","zpracuj.php",true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.send(params); } </script>
<style>
.echoForm { font-size: 11px; font-weight: bold; color: #dd0000; }
</style>
<? $session_ft=$_SESSION['ft2']; $token = md5(rand()*rand()); $_SESSION['ft2'] = $token; ?>
<h3>Formulár:</h3> <form action="?site=vyberHodnotu" method="POST" onsubmit="showHint(this.form); return false;"> <input type="hidden" name="ft" value="<?echo $token; ?>" > <p> Meno: <input type="text" id="meno" /> <span id="menoSprava"></span>
</p>
<p> Heslo: <input type="text" id="heslo" /> <span id="hesloSprava"></span>
</p>
<p> <input type="submit" value="Odoslať">
</p> </form> zpracuj.phpKód: <?php
$menoForm=$_POST["meno"]; $hesloForm=$_POST["heslo"];
// Kontrola Mena
if (strlen($menoForm) < 5) {
$hodnota1="Meno je kratke"; }
elseif (strlen($menoForm) > 15) {
$hodnota1="Meno je dlhe"; } else {
$hodnota1=""; }
// Kontrola Hesla
if (strlen($hesloForm) < 5) {
$hodnota2="Heslo je kratke"; }
elseif (strlen($hesloForm) > 15) {
$hodnota2="Heslo je dlhe"; } else {
$hodnota2=""; }
header("Content-Type: text/xml"); //vytvorim novy XML
$xml = new DOMDocument("1.0","utf-8");
$validace = $xml->createElement("validace"); $xml->appendChild($validace); $vysledok = $xml->createElement("vysledok");
//vytvorim element menoE a vložím do něj data
$menoE = $xml->createElement("menoE"); $menoEData = $xml->createTextNode($hodnota1); $menoE->appendChild($menoEData);
//vytvorim element hesloE a vložím do něj data
$hesloE = $xml->createElement("hesloE"); $hesloEData = $xml->createTextNode($hodnota2); $hesloE->appendChild($hesloEData); $vysledok->appendChild($menoE); $vysledok->appendChild($hesloE); $validace->appendChild($vysledok); //uložím XML výstup
$vystup= $xml->saveXML(); //zobrazím
echo $vystup; ?>
No a to by som nejako potreboval upravit. Tak aby som to mohol spracovavat aj pri vypnutom JS a zaroven mohol "riesit" aj ten token.. A nejako neviem na to prist..
|
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 23.08.2010 11:42 | |
|
Prosim Vas..ako sa da teda zapista ta URL v Kód: xmlhttp.open("POST","zpracuj.php",true); ak chcem aby mi to odosielalo poziadavku, resp. aby Ajax spracovaval script v tom istom subore ako je formular?? Cize nahradit zpracuj.php na formular.php Lebo nech skusam cokolvek, vzdy mi to vyhodi tuto hlasku: Citácia: Chybná analýza XML: nezhodný tag (nevhodne spojený tag). Očakávalo sa: </link>. Umiestnenie: http://www.xxxxxx.sk/xxxx?site=formularRiadok 19, stĺpec 3: No a v mojom pripade Riadok 19 je tento: Kód: if (xmlhttp.readyState==4 && xmlhttp.status==200) {
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 23.08.2010 12:16 | |
|
Musis zabezpecit, ze ked volas formular.php Ajaxom (napriklad si pridaj parameter ajax=1), nech sa nevypisuje cely obsah stranky, ale len to, co potrebujes.
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 23.08.2010 12:17 | |
|
problem bude vtom ze sa ti vo formular.php generuje html content a ty si pytas xml content cez ajax. mal by si ajaxom nastavit http request tak ze mu parameter "User-Agent:" nastavis na napr "AJAX" a vo formular.php si otestujes ten parameter a ak tam bude "AJAX" tak odpoved vygenerujes ako XML , inak ako HTML
|
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 23.08.2010 13:43 | |
|
coldak nemohol by si mi napisat ako by to malo vyzerat? lebo pozeral som nieco k tomu User-Agent a jedine co som nasiel bolo vlastne zadefinovanie prehliadaca. Nieco take: Kód: User-Agent: Mozila/5.0 (Windows;0;Windows NT 5.1;en-US;ru:1.7.6) alebo toto: Kód: requestHeaders: {"User-Agent":"Mozilla 5.0 (Linux; X11)"} Mam to napisat nejako takto?: Kód: User-Agent: Ajax
A kam to mam presne vlozit?? A potom to samotne testovanie kde mam byt vykonane?? Vo funkcii Ajaxu, alebo este pred tym??
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 23.08.2010 14:07 | |
|
Kód: xmlhttp.open("POST","zpracuj.php",true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("User-Agent", "AJAX"); xmlhttp.send(params);
|
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 23.08.2010 15:38 | |
|
No tak som to skusal..S tym parametrom co mi poradil Ďuri..Lenze problem je v tom, ze to neviem vyriesot tak, aby som to vsetko (cely ten formular) spracovaval v jednom scripte. Totiz..pokial sa formular spracovava v scripte zpracuj.php:
Kód: xmlhttp.open("POST","zpracuj.php",true); , tak to funguje. Ale akonahle upravim header na Kód: xmlhttp.open("POST","formular.php",true); ,tak to nefunguje a vypise mi to hlasku: Citácia: Warning: Cannot modify header information - headers already sent by (output started at /xxxxx/xxxxxx/www_root/....chybove riadky.. Ako to mam teda zapisat aby mi to spracovavalo vsetko v jednom scripte?? Ako ma vyzerat ta header informacia?? Kód: xmlhttp.open("POST","Co presne tu mam zapisat?",true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.send(params);
|
|
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| nefunguje script v JavaScript, VBScript, Ajax | 4 | 449 | 06.04.2010 18:35 Ďuri | | script nefunguje v IE v JavaScript, VBScript, Ajax | 12 | 946 | 11.10.2009 16:41 neopagan | | Nefunguje mi script na odosielanie mailu v PHP, ASP | 1 | 483 | 15.12.2009 15:56 Snacker | | Nefunguje mi script na upload suborov v PHP, ASP | 9 | 718 | 22.02.2008 20:44 vl4kn0 | | script nefunguje po pridaní tagu <form> v JavaScript, VBScript, Ajax | 5 | 526 | 06.04.2011 16:07 1daemon1 | | Outlook - script pre nastavovanie účtu pre odosielanie v JavaScript, VBScript, Ajax | 4 | 562 | 20.07.2011 13:17 Strimer_SK | | funkcia pre input v skrytom dive v JavaScript, VBScript, Ajax | 2 | 380 | 04.12.2010 12:15 DeeJay3 | | najst najblizsi input pre daným elementom v JavaScript, VBScript, Ajax | 21 | 1102 | 12.03.2011 18:40 DeeJay3 | | script pre registraciu v PHP, ASP | 8 | 563 | 08.04.2008 12:04 Tominator | | upload script pre Mobil v PHP, ASP | 3 | 514 | 29.07.2011 0:50 Slappy | | python script pre gnuplot a apache v Perl, Python, Ruby, CGI | 0 | 427 | 19.12.2014 23:44 zeto750 | | Zháňam script pre registráciu na webe v PHP, ASP | 2 | 823 | 27.09.2009 11:58 Svolo | | JS script pre menenie obrazkov, poradte ako prerobit v JavaScript, VBScript, Ajax | 5 | 1602 | 23.08.2008 7:40 B.A.X.O | | Hladam zdatneho PHP/JS/AJAX... kodera pre komunikacny script v Ponuka práce | 1 | 1037 | 20.09.2008 18:53 Hack2er | | Port forward pre Vuze nefunguje v Ostatné programy | 3 | 460 | 22.07.2012 22:27 nBXXL | | Ovládaci panel pre zvuk, nefunguje. v Audio programy | 1 | 505 | 02.09.2015 0:03 Bubo2306 |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|