[ sekvoja @ 03.08.2008. 23:27 ] @
Nesto kao: Code: if(xmlhttprequest) { // jeste } else { //nije } |
[ sekvoja @ 03.08.2008. 23:27 ] @
[ sekvoja @ 04.08.2008. 01:57 ] @
Dodao sam javascript u formu:
Code: <form action="/process.php" method="POST" name="vote" onsubmit="example(); return false;"> <input type="hidden" name="t" value="0" /> <script language="javascript"><!-- window.document.vote.t.value = 1; </script> </form> tako da kada je javascript enabled vrednost t je jednaka 1, a to znaci da saljem upit sa ajaxom. F-ja example(): Code: function example(){ var url = "process.php"; xmlhttp.open("POST", url, true); xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4){ result = xmlhttp.responseText; document.getElementById('votemsg').innerHTML = result; } } xmlhttp.send(null); } U div votemsg hocu da upisem "Ajax" ili "HTTP", na zalost uvek dobijam HTTP. U cemu bi bio problem? process.php: Code: if($_POST['t'] == 1) { echo 'Ajax'; } else { echo 'HTTP'; } A evo i requesta: Code: var xmlhttp=false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, we can cope with old IE versions. // and security blocked creation of the objects. try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @end @*/ if (!xmlhttp && typeof XMLHttpRequest!='undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp=false; } } if (!xmlhttp && window.createRequest) { try { xmlhttp = window.createRequest(); } catch (e) { xmlhttp=false; } } [ Aleksandar Ružičić @ 04.08.2008. 02:34 ] @
za detekciju da li je u pitanju ajax request ja ti preporucujem da podesis neki header koji ce php da proveri.
e da, pogledaj jQuery JavaScript Library izmedju ostalog ima i odlicnu podrsku za rad sa ajaxom (dosta je jednostavno koristiti biblioteku) [ sekvoja @ 04.08.2008. 14:12 ] @
Nasao sam na netu da je nalakse detektovati request sa variablom
u url (&ajax=1) ili hidden poljem u formi. U skriptu koji sam prilozio kao attachment u mom drugom postu to sam i uradio ali je problem sto php ne prepoznaje post promenljive kada upit ide preko ajaxa. Nisam neki js guru, pa nisam ni siguran da to moze tako da radi. Znam za jquery, zanimljiv library... [ Aleksandar Ružičić @ 04.08.2008. 17:21 ] @
jquery upravo koristi header prilikom slanja requesta tako da mozes jednostavno u php scripti da vidis da li je u pitanju ajax request ili ne:
Code: $.post('url/do/skripte.php', {param1: 'bla', param2: 123}, function(data) { alert(data); }); Code: <?php if ($_SERVER['X-Requested-With'] == 'XMLHttpRequest') { echo 'ajax'; } else { echo 'http'; } ?> naravno ne moras jquery koristiti samo zbog toga sto ti podesava odgovarajuci header, to mozes sam: Code: xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); ali je (bar meni) mnogo lakse praviti ajax aplikacije pomocu ove biblioteke nego "rucno"... [ sekvoja @ 04.08.2008. 18:00 ] @
Evo sad bas gledam jquery, ali me interesuje ovo konkretno sto sam
pitao. Znaci zasto php ne prepoznaje variablu kada ona stize ajax upitom? Ako ne moze onako kako ja hocu ne gine mi jquery :) [ Aleksandar Ružičić @ 04.08.2008. 18:12 ] @
jesi li probao if($_REQUSET['ime-varijable'])?
[ sekvoja @ 04.08.2008. 18:39 ] @
Upravo probao i ne radi...
Pazi, PHP ne prepoznaje variable samo kada upit stize ajaxom. Kada iskljucim javascript onda mogu da vidim sve promenljive... Sa Web Developer toolbarom iz ff mogu da menjam vrednost ajax u formi u 1 ili 2. Tada se ehuje sve ok. Nije mi jasno sta ne radi u ovoj prostoj skripti ccc. A ne treba mi nista vise od prostog echa prave vrednosti. [ Aleksandar Ružičić @ 04.08.2008. 19:03 ] @
sad sam malo bolje pogledao tvoj js kod i jasno mi je sto nece da ti radi :)
elem, ti uopste i ne saljes podatke serveru kroz ajax upit: xmlhttp.send(null); znaci treba ti: Code: xmlhttp.send('param1=value'); posto pretpostavljam da hoces celu formu (vrednosti svih inputa) da posaljes preko ajax upita, onda ces morati krzo jedan loop da generises param=value¶m=value parove, evo npr kako to sa jqueryjem mozes da napravis (dosta dugo koristim ovu bilioteku pa sam se odvikao od klasicnog DOM scriptinga) Code: function exaple(frm) { var request; $(frm).find('input[type!="button"],select,textarea').each(function() { request += $(this).attr('name') + '=' + encodeURIComponent($(this).val()) + '&' }); request = request.substr(0, request.length - 1); // ovde ti je request oblika name=value&name=value&name=value ... } i samo u onsubmit umesto example() stavi example(this) [ kazil @ 04.08.2008. 19:04 ] @
@sekvoja: pa naravno da ti daje HTTP za odgovor, kada ni ne posaljes taj 't' parametar. A i postavi id atribut za to tvoje hidden polje
Code: var podaciSaForme = ""; podaciSaForme = 't=' + document.getElementById("t").value; xmlZahtev.onreadystatechange = stateChanged; xmlZahtev.open("POST","process.php",true); xmlZahtev.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlZahtev.setRequestHeader("Content-length",podaciSaForme.length); xmlZahtev.setRequestHeader("Connection","close"); xmlZahtev.send(podaciSaForme); naravno ovo nije ceo kod koji ti treba, prepisi tako da radi. edit: Pretece me Aleksandar :) [ Aleksandar Ružičić @ 04.08.2008. 19:07 ] @
jednom i ja nekog da preteknem za par sekundi :)
[ sekvoja @ 04.08.2008. 19:32 ] @
He he, kad ne znam js :)
Sada radi, hvala obojici, pozdrav... [ stevs986 @ 11.10.2008. 16:06 ] @
Citat: kazil: @sekvoja: pa naravno da ti daje HTTP za odgovor, kada ni ne posaljes taj 't' parametar. A i postavi id atribut za to tvoje hidden polje Code: var podaciSaForme = ""; podaciSaForme = 't=' + document.getElementById("t").value; xmlZahtev.onreadystatechange = stateChanged; xmlZahtev.open("POST","process.php",true); xmlZahtev.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlZahtev.setRequestHeader("Content-length",podaciSaForme.length); xmlZahtev.setRequestHeader("Connection","close"); xmlZahtev.send(podaciSaForme); naravno ovo nije ceo kod koji ti treba, prepisi tako da radi. edit: Pretece me Aleksandar :) Radim nesto sa ovim i naleteo sam na ovaj tvoj kod, problem koji imam je kako da odvajam podatke u promenljivoj podaciSaForme? Pokusavao sam zarezom, tacka zarez, ali bezuespeno on sve to tretira kao da je promenljia t. Znaci hocu da posaljem vise podataka sa forme... [ Nikola Poša @ 11.10.2008. 17:24 ] @
Ako sam te dobro razumeo, ti hocesh da poshaljesh vishe parametara nekom skriptu... To radish tako shto svaki prosledjen parametar odvajash sa znakom '&'. Isto kao kad ih shaljesh metodom GET. U ovom primeru koji si citirao je vec unapred generisan string za slanje (podaciSaForme), a ti to mozhesh da odradish i drugachije, npr. za svaki podatak iz forme koji shaljesh napravish promenljive, u kojima cesh da dohvatish vrednost tih podataka, ovako:
Code: var podatak1 = document.getElementById("prvi").value; var podatak2 = document.getElementById("drugi").value; var podatak3 = document.getElementById("treci").value; ... xmlZahtev.send('prvi=' +podatak1 +'&drugi=' +podatak2 +'&treci=' +podatak3); [ stevs986 @ 11.10.2008. 18:14 ] @
Lakse mi je da ih sve posaljem kroz jedan string koji dinamicki generisem u zavisnosti od nekih uslova, nego nisam znao kako da ih razdvajam.... Hvala ti puno na odgovoru... Pozdrav...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|