ugrás a tartalomhoz

AJAX kérés eredményében JS függvény. Lehetséges?

haho · 2011. Aug. 20. (Szo), 06.43
Sziasztok!
Az AJAX-al való ismerkedés közben problémába ütköztem. Kipróbáltam, hogy AJAX-al oldalfrissítés nélkül iratok ki szövegeket, képeket, linkeket adatbázisból. Aztán megoldódott az ékezetes karakterek problémája is.
És olyan elemeket is kiírattam AJAX-al amikre JS eseménykezelők vannak meghatározva. Ezek azonban csak akkor működtek, ha egy már létező JS függvényt és JS változókat használtak.

A kérdésem tehát az lenne, hogy megoldható-e az, hogy az AJAX lekérdezés eredményében definiálok JavaScript függvényeket, meg Javascript változókat és tömböket. Mert ezek mind nem sikerültek...

PÉLDÁUL ILYET SZERETNÉK:
Lekérek képeket az adatbázisból és közben meghatározok egy JS tömböt, amibe betöltöm a képek ID azonosítóját.
(Ez jelenleg nem sikerül. Nem jön létre a tömb és nem töltődik fel tartalommal.)

Előre is köszönöm ha segítetek!
 
1

Nem teljesen értem, mit

H.Z. v2 · 2011. Aug. 20. (Szo), 06.48
Nem teljesen értem, mit szeretnél (pláne nem, hogy mi köze a címbeli kérdésnek a tömbödhöz).
Ha jól sejtem, neked egy globális változó kellene, amit valamennyi JS függvényből el tudsz érni, de pedig az ajax-ból lokális tömbbe pakolod az adatokat. De így látatlanba csak tippelni tudok.
2

eval

zzrek · 2011. Aug. 20. (Szo), 11.49
Az ajax szöveget ad vissza. Ha ez egy javascript kód, akkor eval-lal végrehajthatod. Ha ez a kód egy függvény, vagy egy változó (tömb) deklarálás, akkor figyelj oda, hogy az eval milyen kontextusban értelmezi a kódodat, mert ott lesz csak elérhető a függvény (vagy változó).
3

Rossz felől közelíted a

Hidvégi Gábor · 2011. Aug. 20. (Szo), 11.55
Rossz felől közelíted a problémát, a kapott adatok feldolgozását kéne megoldanod normálisan.
4

Üdv! Kicsit nehezen értem

Karvaly84 · 2011. Aug. 20. (Szo), 12.51
Üdv!

Kicsit nehezen értem amit írsz.

Először is ha az ajax válaszba teszel javascript kódot, azt ki kel értékelni (eval) ami nem olyan egyszerű egyébként ha pl. az a cél, hogy a globális névtérben legyen kiértékelve a kód:

function exec(src) {
        if (window.execScript) window.execScript(src); // IE.
        else window.eval.call(window, src); // FF, Chrome, stb.
    };
Abból, hogy a tömböt amibe pakolod a képeket nem éred el én arra következtetek, hogy pl az onreadystatechange-be a var kulcsszóval felvezetett változó nem érhető el onnan ahonnan hivatkoznál rá. Ha ez lenne a helyzet akkor a tömböt kösd egy olyan helyre amit elérsz minden honnan pl. praktikusan a window-hoz.
5

Köszi

haho · 2011. Aug. 20. (Szo), 20.14
Köszönöm a hozzászólásotokat!
Ezek alapján fogok ma éjjel - egyenlőre - próbálkozni.
6

Ha az AJAX hívás olyan HTML

tgr · 2011. Aug. 20. (Szo), 21.55
Ha az AJAX hívás olyan HTML kódot ad vissza, amiben script tag, on... attribútum vagy egyéb inline kód van, az a HTML beszúrásakor le fog futni, de ez egy elég szerencsétlen módja az AJAX-os kommunikációnak, inkább küldd vissza pl. JSON-ben az adatokat, és dolgozd fel kliensoldalon.
7

Arról nem is beszélve, hogy

Poetro · 2011. Aug. 20. (Szo), 22.17
Arról nem is beszélve, hogy nem mûködik megbízhatóan minden böngészõben, nem véletlen, hogy a jQuery pl. eltávolítja a SCRIPT elemeket az AJAX-szal behívott HTML-bõl.
8

Értem

haho · 2011. Aug. 20. (Szo), 22.30
Ezt a jQuery-s infót nem tudtam. Akkor én sem fogom ezt a megoldást választani.
Köszönöm a hozzászólásodat és "tgr"-ét is. De a többiek is hozzá járultak, hogy sok mindent megértsek amivel eddig nem voltam tisztában.
Köszönöm!
9

nagyon érdekes

react · 2011. Aug. 20. (Szo), 23.59
Érdekes, amit írtok, én több (van ahol abszolut full ajax) oldalon is használok scripteket, amik jquery ajaxal kerülnek betöltésre mindenféle formában (vegyesen mindent, gyakorlatilag ugyanúgy, ahogy egy statikus oldalban használnám) probléma nélkül. Működő, látogatott oldalakról van szó.
Van fejlesztés alatt álló oldal is, ahol igen jelentős mennyiségű függvényt és lefutó scriptet töltök be ajaxon keresztül, szintén probléma nélkül, mindenféle extra körültekintés nélkül, simán a behúzott htm fájlban inline elhelyezve.
Semmiféle problémával nem találkoztam még ezzel kapcsolatban.
10

???

haho · 2011. Aug. 22. (H), 05.14
Akkor most mi van?
Szerinted szinkron és aszinkron kérés esetén VAGY iframe megoldás vagy xmlhttprequest esetén sincs gond? Tehát elképzelhető hogy nem bármilyen típusú AJAX kérés esetén működő megoldás ez?
11

Milyen előnyökkel jár az, ha

Hidvégi Gábor · 2011. Aug. 22. (H), 06.52
Milyen előnyökkel jár az, ha függvényeket utólag töltesz le, azon kívül, hogy egy-két századmásodpercet megspórolsz az oldalad első betöltésénél? Hisz így nyilván kell tartanod, mi van lenn a kliensen, szóval amit megnyertél a révnél, elveszted a vámon.
12

ajax

react · 2011. Aug. 22. (H), 13.41
Főleg fejlesztés alatt álló oldal esetén van, hogy az összes, adott aloldalra vagy részre vonatkozó függvényt a fetch fájlban tárolom (én fetch fájlnak nevezem azt, amit ajaxal behúzok). Pl tegyük fel egy saját html popup jellegű ablakban jelenítem meg egy felhasználó adatlapját ha rákattolsz a nevére. Az adatlap htmje egy fájlban van amit ajaxal behúzok és beletöltöm a popup keretbe. Akkor (amikor fejlesztés alatt van az oldal) az összes js-t ami az adatlap módosítását stb szolgálja ebben a behúzott fájlban tárolom a htmel és phpval együtt, így nem kell külön irogatnom, valamint a fejlesztés-tesztelés során nem kell frissítgetnem az oldalt, mert kattra az ajax nem csak a htmet húzza be hanem a js-t is, mindig a frisset. Ha elkészült az oldal akkor persze külön js fájlba kell helyezni a kész, ellenőrzött tartalmat, hogy ne kerüljön fölöslegesen mindig újra betöltésre, sejtésem szerint ez böngésző memória zabáláshoz is vezethet.
Vannak dolgok amik viszont a végleges oldal esetén is maradhatnak a fetchelt fájlban, pl a betöltés után egy változónak értéket adni, vagy lefuttatni egy jquery show v hide effektet, stb.
Amit mondani akartam, hogy én ennek a módszernek semmilyen hátulütőjével nem találkoztam, minden rendben működött, kényelmesen és hatékonyan lehet így megoldani mindent.
Mindez amiket írok jquery ajax esetében működik, teljesen saját js ajax lekéréseket már nem használok (emlékeim szerint ott nem így megy, szerintem a jquery automatikusan evalozza a script tagek között talált tartalmat, de ennek utána lehet nézni, amíg kipróbáltan működik engem nem érdekelnek a részletek). Iframe technikailag egy külön böngésző ablakként funkciónál, nagyon ritkán használom, de elvileg mindennek működnie kellene, ha jól emlékszem IE-ben voltak furcsa biztonsági letiltások iframe esetében, de az is cookiekra vonatkozott, nem js-re.
13

Nem megbízható

haho · 2011. Aug. 22. (H), 18.13
Írták megjegyzésként, hogy nem feltétlenül működik megbízhatóan minden böngészőben. Te találkoztál az öt legismertebb böngésző valamelyikében ilyen problémával vagy csak bizonyos böngészőkre koncentrálsz?
Egyébként mivel tapasztalatom még nincs ezen a téren inkább megoldottam JS nélkül az AJAX kérést, nehogy tényleg gond legyen valahol valamikor e miatt.
De nagyon örültem a Te hozzászólásaidnak is!
14

böngésző megfelelés

react · 2011. Aug. 22. (H), 22.17
Én IE 8-9 (ritkább időközönként 7-es alatt is), Chrome és Firefox alatt tesztelem folyamatosan az általam fejlesztett weboldalakat, Operában, Safariban legfeljebb utólagosan nézem meg és javítok ha kell. Ha komoly gondok lennének, akkor a felhasználóktól jött volna visszajelzés, pl IE 7-esnél előfordul, hogy jeleznek valami eldugott hibát (nem az itt kitárgyalt ajaxal kapcsolatosan, hanem tipikusan html/css). Van olyan oldal, ami full ajax, ajax chat is fut benne és események, értesítések a normál ajax funkciókkal párhuzamosan, tehát minden egyes kattintásra, sőt kattintástól függetlenül időzítetten is ajax lekérések futnak állandóan, és itt sem jeleztek soha semmilyen ajax jellegű hibát, tehát nem hiszem, hogy ez a módszer, amit alkalmazok bámilyen problémát okozhatna, mert az minden bizonnyal már kiderült volna, így én továbbra is maradok ennél a praktikus és kényelmes megoldásnál.