• 14 odgovora
  • 3.830 pregleda
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 01:57 · pre 221 meseci #2
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;
    }
}
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 02:34 · pre 221 meseci #3
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)
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 14:12 · pre 221 meseci #4
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...
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 17:21 · pre 221 meseci #5
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"...
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 18:00 · pre 221 meseci #6
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 :)
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 18:39 · pre 221 meseci #8
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.
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 19:03 · pre 221 meseci #9
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&param=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)
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Kako da detektujem ajax request sa php? 04.08.2008. u 19:04 · pre 221 meseci #10
@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 :)
Re: Kako da detektujem ajax request sa php? 11.10.2008. u 16:06 · pre 219 meseci #13
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...
Potpis
Linkedin: http://www.linkedin.com/in/sladjannikolic
Twitter: https://twitter.com/_SladjanNikolic
Re: Kako da detektujem ajax request sa php? 11.10.2008. u 17:24 · pre 219 meseci #14
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);
Re: Kako da detektujem ajax request sa php? 11.10.2008. u 18:14 · pre 219 meseci #15
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...
Potpis
Linkedin: http://www.linkedin.com/in/sladjannikolic
Twitter: https://twitter.com/_SladjanNikolic
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme