ugrás a tartalomhoz

AJAX elméleti kérdés

blabla · 2012. Nov. 10. (Szo), 09.15
Sziasztok

Arra lennék kíváncsi, hogy ti hogyan valósítanátok meg a következô feladatot. Adott egy parent div es benne tobb masik:

<html>
 <body>
 .... 
 <div id='parent'>
  <div id='child1'>...</div>
  <div id='child2'>...</div>
  <div id='child3'>...</div>
  <div id='child4'>...</div>
  <div id='child5'>...</div>
 </div>
 ...
 <input type='button' value='' onclick='refresh_content_of_1_and_3_child_div()'>
 <input type='button' value='' onclick='refresh_content_of_3_4_and_5_child_div()'>
 ...
 </body>
</html>
A feladat az lenne, hogy AJAX segítségével szeretném frissíteni az egyes child divek tartalmát. Egyes események bekövetkeztekor (pl gombra, linkre kattintáskor) , nem kell minden child-ot frissíteni, elég néha csak 2-ôt , vagy 3-at.
Minden child div-nek van tartalma, amely nem egy teljes oldal, de nem is pár html tag, hanem egy összetettebb, esetenként képeket is megjelenítô html kód, és minden child elemhez egyetlen, igaz kicsit komolyabb adatbázis lekérés tartozik.

A konkrét kérdésem annyi, hogy érdemes-e külön-külön refreshelni a child diveket, vagy egész egyszerûen a parent-et frissítsem és kész? És ha érdemes külön, akkor csak külön kérésekkel tudom frissíteni a cél elemek tartalmát, vagy lehetôség van arra hogy egyetlen kéréssel újratöltôdjenek a kívánt tartalmak?

Számomra nem egyértelmû hogy csináljam, ezért szeretném a segítségeteket kérni
Köszönöm
 
1

Ami szükséges

Poetro · 2012. Nov. 10. (Szo), 09.56
Szerintem csak azt töltsd le, ami szükséges. Természetesen egyszerre több div tartalmát is lehet frissíteni. Ehhez érdemesebb inkább már JSON-t használni, és természetesen a szerver oldali kódot ennek megfelelően elkészíteni. Azaz egy kéréssel lekéred az 1-es és a 3-as tartalmát, és azt módosítod. Például: http://example.com/contents?child[]=1&child[]=3
{
  "status": "success",
  "child1": "<p>child1 tartalma</p>",
  "child3": "<p>child3 tartalma</p>"
}
2

Szuper

blabla · 2012. Nov. 10. (Szo), 10.25
Nagyon köszönöm , pont erre voltam kíváncsi. Bár JSON-nal még nem foglalkoztam, de sosem késô újat tanulni:)
3

XSLT

Hidvégi Gábor · 2012. Nov. 12. (H), 10.26
Ezzel a megoldással az a probléma, hogy a HTML generálásához kétszer kell dolgozni: egyszer a szerveroldalon, másodszor pedig a kliensoldalon, így kétszer annyi a hibázási lehetőség. XSLT segítségével elég lenne egyszer elkészíteni az oldal sablonját. Persze, ez elsőre nem egyszerű (alaposan át kell gondolni az oldal struktúráját), de szerintem megéri; ha mégsem megy, akkor pedig talán jobb helyből HTML kódot küldeni, a lényeg, hogy egy helyen legyen legenerálva.
4

Arról nem írtam, hogy mi

Poetro · 2012. Nov. 12. (H), 11.26
Arról nem írtam, hogy mi generálja a JSON kimenetet. Az simán lehet XSLT is, vagy egy szerver oldali kód, ami meghív két view-t, majd összepakolja őket egy JSON-ba.
a HTML generálásához kétszer kell dolgozni: egyszer a szerveroldalon, másodszor pedig a kliensoldalon

Ez mindig így lesz AJAX esetén. Valahogy be kell injektálni vagy a kapott HTML-t, vagy a JSON-ból kell generálni HTML-t, majd beinjektálni.
5

»a HTML generálásához kétszer

Hidvégi Gábor · 2012. Nov. 12. (H), 14.52
»a HTML generálásához kétszer kell dolgozni: egyszer a szerveroldalon, másodszor pedig a kliensoldalon«

Ez mindig így lesz AJAX esetén. Valahogy be kell injektálni vagy a kapott HTML-t, vagy a JSON-ból kell generálni HTML-t, majd beinjektálni.
Nem is magára az injektálásra gondoltam, hanem arra, hogy ha JSON-t küldesz, amiből HTML-t generálsz, akkor ugyanarra a feladatra két kódot kell készíteni, egyszer szerveroldalon az oldal eredeti HTML-jéhez, egyszer pedig a kliensoldalhoz, ami a JSON-ból gyárt HTML-t.

Szerintem a JSON – bár nagyon kényelmes a használata – a fentiek miatt rossz megoldás a hasonló problémákra az XML-hez hasonlítva. Egyrészt kevesebb információ adható át benne (XML-ben a node-nak is lehet attribútumokat adni), másrészt nincs hozzá az XSLT-hez és az XPATH-hoz hasonló technológia.
6

Az XSLT-t és XPath-t melyik

Poetro · 2012. Nov. 12. (H), 16.33
Az XSLT-t és XPath-t melyik oldalon akarod használni? Szerver vagy kliens oldalon? Mert kliens oldalon elég rossz ezeknek a támogatása főleg mobil eszközökön, ráadásul ekkor is kell dolgozni kliens oldalon. Ezen kívül a HTML már le is van generálva, és be van ágyazva a JSON-ba.
7

Ahol lehet, kliensoldalon,

Hidvégi Gábor · 2012. Nov. 12. (H), 17.31
Ahol lehet, kliensoldalon, ahol meg nem, ott pedig a szerveren.