[Ajax] Dynamischer Content etc.

dabu

Well-known member
ID: 11566
L
20 April 2006
7.229
407
Ich hatte bisher noch nie mit Ajax zu tun aber in den letzten Tagen hatte ich einiges an Zeit über, was mich zu dem Entschluss gebracht hatte mich etwas mit diesem Thema zu beschäftigen.

Aktuell spiele ich etwas mit dynamischen Content herum. Ich lade beim Klick auf einen Link also nicht mehr die komplette Seite neu, sondern nur den Seiteninhalt in mein div. Wenn ich da allerdings einen Inhalt lade, wo z. B. ein Form drin ist und ich auf den Button klicke, dann funktioniert der Button nicht und es wird eine leere Seite in mein div geladen. Heißt das für solche Fälle ist ein dynamischer Content nichts oder lässt sich das irgendwie anders lösen, sodass ich auf den Button klicken könnte und die Aktion dann ebenfalls in meinem aktuellen div ausgeführt wird? Oder ist dynamischer Content mit Ajax allgemein nichts?

Sind vielleicht paar dumme Fragen, aber wie gesagt versuche ich das gerade etwas zu lernen und verstehen :).
 
Also das der Button nicht kann eigentlich nur der Fall sein wenn der durch Javascript ausgelöst wird. Auch ein Grund warum ich Prototype nutze der macht standardmäßig bei den rein geladenen Inhalten ein eval damit die Scripte funktionieren.

Zumal das die Syntax auch sehr vereinfacht z.B. dein Link ruft folgende Funktion auf.
Code:
function ladeSeite(seite)
{[INDENT]var updater  = new Ajax.Updater('idvomdiv',seite,
{[INDENT]onCreate: function()
{[INDENT]alert("lade Seite");
[/INDENT]},
onComplete: function(transport)
{[INDENT]altert("fertig geladen");
[/INDENT]}
[/INDENT]});
[/INDENT]}
 
Ich hab das jetzt grad getestet. Der Seiteninhalt wird richtig geladen. Aber sobald ich wieder auf einen Button klicke verschwindet der komplette Seiteninhalt :-?. Ich glaube ich mach da irgendetwas falsch.
 
Das ganze funktioniert nicht wie mit Frames. Das Target von deinem Form zeigt auf die aktuelle Seite im Browser, demnach wird beim Klick auf senden auch das geladen was im action Attritbut vom Form steht.
 
Willkommen in der Welt von Ajax :)
Burnred hat recht, bei Ajax ist es essentiell anzugeben, wohin Formulare verweisen, ich möchte zudem einmal die FF-Extension FireBug anmerken mit der man solche Probleme und andere AJAX-Dinge (aber nicht nur das) sehr leicht debuggen kann.

Prototype ist genial, es gibt nur eines was mich stört, es wird für jeden Request ein neues Ajax-Request erzeugt, wenn jemand also wild in einem Menü rumklickt, werden viele parallele Requests gestartet die nachher eventuell noch kolidieren, oder besonders lustig ist dies bei AutoCompleting wenn man Ajax eingibt und die Completion gerade von "Aja" angezeigt wird :LOL:
Aber da gibt es bei scriptaculous nen kleinen Fix, der das behebt, das wäre mal dringend notwendig für das normale Prototype.
 
[offtopic]Deswegen macht man bei Autocomplete ja auch eine Verspätung rein, so dass nicht gesucht wird während noch getippt wird. Zumal wird der Request beim nächsten Aufruf der Funktion nicht sowieso vom Neuen überschrieben und dessen Antwort verschwindet im Datennirvana?[/offtopic]

Firebug hat aber auch noch ein paar Probleme und zwar werden im Protokoll Fehler von Seiten Seiten anzeigt die gerade in einem anderem Tab offen sind und für die es explizit ausgeschalten ist. Hab manchmal ganz schön Probleme meine eigenen Errors zu finden wenn irgendeine andere Seite alle 1 sek durch setInterval eine Fehlermeldung wirft.
 
Also Ajax ist schon was feines, aber man muß sich da schon etwas einarbeiten, was ich auch gerade mache.

nutze bisher was man mir hier gepostet hat:
https://www.klamm.de/forum/showthread.php?t=134394

an Prototype habe ich mich noch nicht ran gewagt, weil das ja schon umfassender ist, wenn ich mal mehr Zeit habe...

Habt ihr vielleicht zu prototype ne deutsche Seite, die es gut erklärt? Hatte bsiher nur englishe gefunden, und das war mir etwas zuviel momentan.
 
Ich würde eine Funktion 'sendPost()' oder ähnliches machen, diese liest dann die aktuellen Formulardaten aus und sendet sie per POST / GET. Die Rückgabe wird dann in dem DIV angezeigt oder in einer MESSAGE Box z.B. .
So habe ich es bei meinem Script gelöst ;)

EDIT:
Oh lol, hoffe du hast es in der Zeit noch nicht selber gelöst^^