Teile von JS mit Ajax erneuern
Encoder
- javascript
Hallo ihr, ich hätte wieder was wo ich mir unsicher bin.
Es gibt eine Veranstaltungstabelle, zu der man per Ajax neue Einträge hinzufügen kann. Daraufhin wird die Tabelle zurückgegeben und in ein div geschrieben, damit der neue Eintrag sichtbar ist.
Jetzt soll eine Art Tooltip mit JavaScript dazu. Das funktioniert auch schon, die dazu gehörigen Texte stehen in einem Array im Quellcode der Seite.
Das Problem ist nur, dass der neue Eintrag noch keinen Text im Array hat, da der JS-Teil nicht aktualisiert wird.
Ich bin mir da nicht sicher wie ich das am besten und am "funktionierendsten" machen soll.
Das Array wird bisher angelegt und gefüllt:
<head>
<script ...>
var tooltips = new Object();
tooltips["2010-03-24"] = "Text für den 24. März";
tooltips["2010-03-25"] = "Text für den 25. März";
und so weiter.
</script>
</head>
Kann ich diesen Teil komplett mit in das besagte div schreiben lassen und die JS-Funktion im <head> der Seite findet das auch zuverlässig wenn es aktualisiert wird?
Oder sollte ich das Objekt fest anlegen und im div nur die neuen Teile eintragen lassen?
Wär schon cool wenn das in jedem Browser funktioniert, ich weiß halt nicht wie die JS interpretieren und wo es mit meiner Idee Probleme geben könnte.
hi,
wenn ich das richtig verstanden habe, möchtest Du JS nachladen mit Ajax. Das geht einwandfrei in IE und FF unter einer Bedingung:
Diejenigen JS-Teile oder Funktionen, die den Code von mit Ajax nachgeladenem JS verwenden sollen, müssen innerhalb der Callback-Funktion notiert sein. Nur damit ist sichergestellt, dass der Code aus der Ajax-Response im Browser angekommen und verfügbar ist.
Viele Grüße,
Horst Ajacks
Hallo!
Es geht sogar noch einfacher: man schreibe ein neues Script-Tag in den body. Nettes Extra: wenn man das Script-Tag wieder entfernt, wirkt das wie ein Timeout. Noch ein Vorteil: man kann sich sogar die Same-Domain-Policy und eval() sparen. Letzter Vorteil: funktioniert im IE sogar, wenn ActiveX ausgeschaltet ist.
Natürlich sollte man auch dann immer noch prüfen, ob das Script tatsächlich geladen wurde (denn es gibt so etwas wie einen Verbindungsabbruch), aber ansonsten gibt es da wenig Probleme.
Gruß, LX
Also steht im Ergebnis von Ajax ein <script> Abschnitt, der in den body des Dokuments ein weiteres <script> schreibt. Und darauf kann ich dann aus dem durch Ajax übertragenen HTML zugreifen, wenn da meine onmouseover Events ausgelöst werden?
Das heißt ein so erzeugtes Script wird also ausgeführt, sobald es fertig geschrieben wurde?
Nettes Extra: wenn man das Script-Tag wieder entfernt, wirkt das wie ein Timeout.
Was bedeutet das in diesem Fall?
Aus den vorigen Beiträgen lese ich raus dass die von vorneherein vorhandenen Scripte und die per Ajax mitgeschickten nicht unbedingt zusammenhängen. Wie muss man sich diese Trennung vorstellen?
Ich dachte unter anderem daran, dass ich das Array im festen Code erzeuge und dann evtl. per Ajax nur noch Code nachliefere, der auf dieses Array zugreift und es mit neuen Werten füllt. Wäre sowas demnach nicht möglich?
Also steht im Ergebnis von Ajax ein <script> Abschnitt, der in den body des Dokuments ein weiteres <script> schreibt.
Der Script-Bereich muss vorher schon da stehen
<script type="text/javascript" id='alib'>/*kill me*/</script>
In der callback-Funktion wird o.g. Bereich überschrieben, z.B. so
document.getElementById('alib').innerHTML = response;
Wobei in response nur JS-Code steht. Nach dieser Zeile kanst Du auf den nachgeladenen JS-Code zugreifen.
Hotti
http://rolfrost/jsreload.html
Der Script-Bereich muss vorher schon da stehen
Nein, muss er nicht.
In der callback-Funktion wird o.g. Bereich überschrieben, z.B. so
document.getElementById('alib').innerHTML = response;
Wenn dann document.getElementById('alib').text = response; innerHTML geht nicht im IE.
Also steht im Ergebnis von Ajax ein <script> Abschnitt, der in den body des Dokuments ein weiteres <script> schreibt. Und darauf kann ich dann aus dem durch Ajax übertragenen HTML zugreifen, wenn da meine onmouseover Events ausgelöst werden?
Nein, wenn du auf dem Server nur JS Code zurück gibst, brauchst du kein AJAX. Du erzeugst einfach ein neues script-Element mit dem Code als Quelle.
Struppi.
Also steht im Ergebnis von Ajax ein <script> Abschnitt, der in den body des Dokuments ein weiteres <script> schreibt. Und darauf kann ich dann aus dem durch Ajax übertragenen HTML zugreifen, wenn da meine onmouseover Events ausgelöst werden?
Nein. Du benutzt gar kein AJAX in Form eines XMLHttpRequests, sondern schreibst einfach ein Script-Tag mit der URL des nachzuladenen Scripts in den Body, welches Du nach einem Timeout optional entfernen kannst.
Sobald das Script geladen ist, wird es ausgeführt. Du kannst diesem Script optional noch eine Art init-Methode am Schluss mitgeben, die meldet, dass es geladen ist.
Nettes Extra: wenn man das Script-Tag wieder entfernt, wirkt das wie ein Timeout.
Was bedeutet das in diesem Fall?
Dass das Script nach Entfernen des Tags nicht weiter zu laden.
Ich dachte unter anderem daran, dass ich das Array im festen Code erzeuge und dann evtl. per Ajax nur noch Code nachliefere, der auf dieses Array zugreift und es mit neuen Werten füllt. Wäre sowas demnach nicht möglich?
Du kannst in einem nachgeladenen Script auf alle Objekte der Seite zugreifen. Das sollte also kein Problem sein.
Gruß, LX
Moin!
Das Array wird bisher angelegt und gefüllt:
<head>
<script ...>
var tooltips = new Object();
tooltips["2010-03-24"] = "Text für den 24. März";
tooltips["2010-03-25"] = "Text für den 25. März";
und so weiter.
</script>
</head>Kann ich diesen Teil komplett mit in das besagte div schreiben lassen und die JS-Funktion im <head> der Seite findet das auch zuverlässig wenn es aktualisiert wird?
Im Prinzip willst du ja nur Daten übertragen. Und die sind am schlauesten als JSON verpackt übertragen. Und wenn parallel auch noch HTML-Fragmente mitmüssen, kann man diese Teile auch noch mit ins JSON-Ergebnis tun, und von der Ajax-Callback-Funktion auseinanderdröseln lassen.
- Sven Rautenberg