Ajax-al beolvasni adatokat a serverrol ahol php van. (Prototype)

Teljesen kezdo vagyok ezen a teren a protoype-t hasznalnam erre a celra mert ugylattam hogy a jquery-tol nekem ez konyebb lenne :) Egy oldalba szeretnek adatokat beolvasni a severrol (ugyanaz a szerver ahonnan az oldal is letoltodik).

Konkretan egy vendegkonyvel kiserletezek ezel a dologgal, minden egyes bejegyzesnel van egy href="javascript:enable_gbook(".1111.",'EnableGuestbook');" Termeszetessen az 1111 ertelemszeruen mindeg mas mas ....

function enable_gbook(message_id,x_method) {
new Ajax.Request('/psc.php',
{
method:'post',
parameters: {object: 'Guestbook', method: x_method, uid: message_id, xx: Math.random()},
onCreate: function(){
$('enable'+message_id).hide();
$('enabling'+message_id).className="";
},
onSuccess: function(transport){
var response = transport.responseText || "no response text";
alert("Success! \n\n" + response );
// itt az alert mutatja is a valaszt amit a psc.php -tol kap
var myjson = transport.responseText.evalReponse();
// ettol a sortol nem jut tovabb itt a bibi valahol....
alert("Aaaaaaa:\n\n" + myjson);

$('item'+message_id).className="newborder";
$('enabling'+message_id).hide();
},
onFailure: function(){ $('enabling'+message_id).className="hidden";}
});

}

Ez meg a psc.php idevago resze ....

$uid = (int)$_POST['uid'];
$sql = "UPDATE guestbook_tetelek SET `engedelyezve` = 'y' WHERE `uid` = ".$uid;
if (mysql_query($sql))
$response = array ('Uid'=>$uid, 'Status'=> 'Ok');
else
$response = array ('Uid'=>$uid, 'Status'=> 'Error');
header ("Content-Type: text/x-javascript");
$output = json_encode($response);
echo ("valami(".$output.");");

Szoval vegeredmenyben a psc.php attol fuggoen hogy sikeresen vegrehajtja az update -t vagy Ok vagy Error valaszt adna egy json -ba mert mas estekben tobb mas adat is majd igy lessz atadva. A javascriptben nem tudom feldolgozni ezt a json valaszt, es ebben kellene egy kis segitseg.

Azt sem bannam ha valaki tudna valami pdf -et ilyen temaban, lehet angol is de azert magyar jobb lenne. A neten mar nezelodtem de amiket talatam azok alapjan nem boldogultam ...

Hozzászólások

PHP-ban siman echo $output

Hasznald a responseJSON valtozot, a prototype kigyujti neked, az erteke {uid: 1111, status: 'ok'} lesz, mint js objektum.

Ugy nez ki hogy sikerult megoldanom :)

1. a php fajlban a
header ("Content-Type: application/json; charset=utf-8");
sorba a vegen ez lett a megoldas

2. a javascriptben meg a
var valasz = transport.responseJSON;
alert("myjson:\n\n id=" + valasz.Uid + "\n\n Status=" + valasz.Status);

Szoval mukodik a dolog, gondolom igy kell csinalni :)

Azert ha valakinek van valami jo pdf akkor annak azert nagyon megorulnek!

Azt szeretnem meg kerdezni hogy sokfele latom hogy az ajax keres vegere a parameterekben szinte mindeg valami veletlen szamokat is beraknak tudom ez a bongeszok cache kiiktatasa miatt van, de nincs ettol valami elegansabb szebb megoldas? Vagy en is veletlenszamozzak?

Aadaam, nagyon szepen koszonom a segitseged!!!

Én úgy szoktam, hogy egyetlen véletlen számot generálok, ami a kliens alkalmazás teljes élete alatt azonos, és azon belül sorszámozom a kéréseket. Ez segíthet nyomkeresésben is talán, bár nekem még sosem volt rá szükségem.

Ha nagyon paranoiás vagy, hogy a véletlenszámok ütköznek esetleg, akkor lehet úgy is csinálni, hogy szerver oldalon generálod (itt már lehet akár dátum vagy sorszám alapú is), és egy első kéréssel inicializálja magának a kliens alkalmazás.

Nem a paranoiara gondoltam, vegulis azok a veletlen szamok csak a kliens oldalon vannak felhasznalva, hanem csak arra hogy ne kelljen mindeg hozzarakni azt a valamilyen szamot, legyen az veletlen vagy sorszamozott veletlen ...

Valami olyasmire gondoltam inkabb hogy ha POST metodusassal kerem le akkor a bongeszo alapbol nem cache-li vagyis nem a sajat cache -bol szedi ki a valaszt vagy a Headerbe ha hozzaadnek valami no-cache stilusu valamiket akkor nem is kellene egyaltalan az a veletlenszam. Nem tudom mennyire ertheto a gondolatmenetem ...

Azert a keresek ertelmet nem kene agyonvagni, ami GET az legyen GET, ne POST-olgassunk orrba-szajba, annyit nem er a dolog.

Egyebkent meg szerver oldalrol lehet jatszani, van egy csomo cache control header, amit ki lehet kuldeni, meg Expires header, amivel eleve lejart kerest kuldesz, de az a gond, hogy erosen bongeszo-implementacio fuggo, hogy ebbol mit vesz figyelembe. A random szam azert jo, mert igy az egyes requestek kisebbek lesznek az akar 5-6 cache control fejleccel.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Igen, tudom hogy a get az akkor van amikor adatokat kerek le a szerverrol, es a post viszont amikor a szerveren modositom ...

Igen, a cache control meg ilyesmikre gondoltam, mongyuk az eszembe sem jutott hogy a random szammal sokkal kisebb requestek lesznek :) meg persze arra sem gondoltam hogy ezek a dolgok nem minden bongeszoben mukodnek megfeleloen.

Szoval akkor vegeredmenyben majd szamozom en is...

Az a baj, hogy lesznek proxy-k es bongeszok, amik le fogjak sz.rni, hogy te mit gondolsz az ETag cache-rol vagy barmirol. Ez szomoru, es a vilagnak nem ilyennek kellene lennie, de egyes komponensek, ha javascriptet latnak, orokre akarjak cache-elni.

Nem hiszek a veletlenszamos megoldasban, altalaban a napi datumot szoktam megadni es akkor nem lesz baj, egy napig cache. Egy atlag CDN-t amugy is igy allitunk be. Vagy persze lehet korlatozni az alkalmazas hatokoret ismerten jol mukodo bongeszokre es proxy-mentes rendszerre, de gondolom nem intranet portalt fejlesztesz.

Mostmar azthiszem hogy minden vilagos, a cache control meg hasonlok elesnek mivel hogy bongeszo meg stb. fuggok sot meg ha "szamozok" akkor igy az atvitt adatmenyiseg is csokkeni fog. Mivel a veletlenszam generalas a kliensnel jon letre az a szervert nem terheli igy gondolom majd az lessz az olyan lekereseknel amiknel a valasz gyakran valtozik amiknel meg a valtozas ritka es nem baj ha esetleg valahol megis kesbol kerul ki a bongeszobe oda meg majd valami ido alapu dolog lessz szoval nem datum hanem majd ora es perc... pl. rand=2310

Es akkor meg azt is megbirom csinalni hogy ezeket a kereseket es a rajuk adott valaszokat peldaul memcachelem a szerveren, valami ijesmire gondolok:
http://foo.bar?valami=11&masvalami=222&rand=2310
akarhany bongeszo is keri le ezt mongyuk ugyanabban a percben a valaszt nem kell ujbol a szerveren oszeraknom hanem pl memcached -bol ki birom adni ...

Az ugy rendben van-e hogy a session id az nem kerul bele az url be hanem a lekeres fejlecebe teszi bele a bongeszo? Mert igy akkor a fenti otlet alapjan a szerveren birok cachelni ... Persze olyan dolgokat amiket egyforman kap meg minden bongeszo, ami meg kolonbozo azoknal meg az url -be beirom session id -et?