Ajax polopate

Programovacie jazyky, rady, poradňa...
LongShot
Amateur
Amateur
Príspevky: 11
Registrovaný: 24 nov 2009, 18:16

Ajax polopate

Príspevok od používateľa LongShot »

prosím mohol by mi tento AJAX spôsob bez refreshnutia stránky niekto podrobne vysveliť? ako skúšam, tak skúšam stále sa neviem dopracovať k výsledku...
predstavujem si to tak, proste že mám v php premennú, a keď sa za behu aplikácie zmení jej hodnota, tak sa to neprejaví refreshom...proste potrebujem zmeniť hodnotu v php premennej, alebo skôr aktualizovať bez refreshu...AJAX mi nie je moc známy, len teraz s ním volačo potrebujem...tak
dakujem za akekolvek rady.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

mám pocit že ani nemáš jasno o čo v ajaxe ide, nemôžeš si len tak za behu php meniť jeho premenné. Môžeš iba spracovávať vstupy z php na serveri a vrátiť výstup bez refreshu stránky do nejakej jej časti. Buď si to iba chaoticky napísal, alebo som nepochopil ja. Na w3c je ale veľmi pekne spravený tutorial pre úplnych začiatočníkov
LongShot
Amateur
Amateur
Príspevky: 11
Registrovaný: 24 nov 2009, 18:16

Príspevok od používateľa LongShot »

audiotrack napísal:mám pocit že ani nemáš jasno o čo v ajaxe ide, nemôžeš si len tak za behu php meniť jeho premenné. Môžeš iba spracovávať vstupy z php na serveri a vrátiť výstup bez refreshu stránky do nejakej jej časti. Buď si to iba chaoticky napísal, alebo som nepochopil ja. Na w3c je ale veľmi pekne spravený tutorial pre úplnych začiatočníkov
máš pravdu zle som to sformuloval, potrebujem presne to čo si povedal ty.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

index.html

Kód: Vybrať všetko

<html>
<body>

<script type="text/javascript">
function send()
{
var xmlhttp;
var hodnota = document.getElementById('hodnota').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)
  {
  document.getElementById(reload').innerHTML=xmlhttp.responseText;
  }
}
xmlhttp.open("GET","ajax.php?hodnota="+hodnota,true);
xmlhttp.send(null);
}
</script>

nejaky text...

<div id="reload">sem pride hodnota</div>
<input type="text" name="hodnota" /><input type="button" onclick="send()" />
znovu text ...

</body>
</html>
ajax.php

Kód: Vybrať všetko

<?php
echo $_GET['hodnota'];
?>
to tak v skratke a jednoduchosti (možno tu budú preklepy, ale je to písané z hlavy. Na pochopenie ti to ale bude stačiť). Ak ho chceš ale používať viac a efektívnejšie, je celkom dosť pekných frameworkov čo ti prácu s ajaxom uľahčuje.
LongShot
Amateur
Amateur
Príspevky: 11
Registrovaný: 24 nov 2009, 18:16

Príspevok od používateľa LongShot »

Ok diky, ja som sa to teda včera už docela dobre naučil a funguje mi to:)
len jediný problém mám vo vrátení výsledku naspäť, teda cez object.responseText pretože odosielam, ale ja odosielam cez POST tie data, no a ja odosielam dve premenne naraz, a response text berie to čo je echo a vždy mi vráti hodnotu spoločne, ale ja to potrebujem oddelit v JS na dve samostatne premenne zase...mam pouzit explode alebo niečo také?

a ako sa brániť proti prepisu hodnôt? ja totiž, tie hodnoty nesmie nikto prepisovať...a zatial som si v hlave nesformuloval žiaden postup ako tomu zabrániť, kedže tie hodnoty sa premielaju cez JS nemám ani ako s PHP fixovať to čo sa tam objavilo...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

áno, môžeš si to rozsekať cez explode. Je na tebe ako si ich pošleš v response naformátované. Tej druhej časti som nejak nepochopil, keď ti to príde "do" php tak si to môžeš overovať ako chceš či tam niekto nepodstrčil nejaké nezmyselné hodnoty
LongShot
Amateur
Amateur
Príspevky: 11
Registrovaný: 24 nov 2009, 18:16

Príspevok od používateľa LongShot »

ok dik uz to mám...

len ešte jednu vecičku by som chcel. ked dam odosladat (prebehne to cez ten php datovy subor atd) tak tam mam loading div, a chcem aby bola cakacia doba nejaka...

volám ho takto pri odosielani:

Kód: Vybrať všetko

hide_div.style.display="block";
setTimeout('lol()', 3000);
a tu je funkcia ktora ho zrusi:

Kód: Vybrať všetko

var hide_div = document.getElementById('id');

function lol(){
 hide_div.style.display='none';
}
to funguje, ja chcem ale dosiahnut aby sa muselo tiez 3000 (teda 3 sekundy) čakať aj na to nez sa zobrazia tie textResponse data co prisli cez ten request.

to sa mi ale vôbec nedarí, možno to zle len zapisujem...vypís dat je takto:

Kód: Vybrať všetko

    if (level.innerHTML == 0){
     text_box.style.display='none';
   }else{
     text_box.style.display='block';
   }
pricom text_box je taky div plny roznych hodnot, tam sa ulozia nacitane data...skusal som k tomuto Ifu dat nejake dalsie setimeouty ale nic, neviem to spravne zapisat mozno....
ocenim dalsie rady dik.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

neviem či je spomalovanie webu tou správnou filozofiu, načo je dobré niečo čo už máš držať a hodiť používateľovi až o 3 sekundy? Ale k veci. Táto podmienka level.innerHTML == 0 nemá zmysel. Neviem čo je level a čo vlastne tou podmienkou bolo myslené, lebo som ani nepochopil o čo presne ti ide. Ak chceš vypísať response text po 3 sekundách, vypadalo by to nejak takto:

Kód: Vybrať všetko

.
.
.
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)
  {
  cakaj_a_vypis(xmlhttp.responseText);
  }
}
.
.
.
pričom cakaj_a_vypis je funkcia ktorá počká 3 sekundy a potom hodí text tam kde potrebuješ
Napísať odpoveď