code2i: dreh mich im kreis...bild cachen, timeout

Beitrag lesen

Hallo

also: coldfusion und javascript haben im prinzip nichts miteinander zu tun, da coldfusion halt auf dem server und js erst im browser ausgeführt werden.

Gut ! Fakt! Du hattest aber geschrieben, "Coldfusion ist zu langsam für JavaScript" ... "wenn CF die Sessionvariable übergeben hat". Das war nicht so gut...denn es hat ,wie du selber bemerkt hast, nichts miteinander zu tun.

der <cfoutput>-tag muss vorhanden sein, damit platzhalter, die bei CF in # stehen, ersetzt werden können.

in meinem falle dient es also nur dazu #session.bild1# durch den namen des bildes zur ersetzen, z.B. af340.jpg.

das javscript wird sonst von cf nicht tangiert und hat somit beim aufruf statt der zeile
bilda.src = "../_upload/images/#session.bild1#";
eben
bilda.src = "../_upload/images/af340.jpg";
da stehen.

Genau so sehe ich das auch!
1.Du hast dein Coldfusion Script, ein HTMLDokument welches durch CF spezifische Tags für die Verarbeitung durch CF vorgesehen ist.

2.Dieses CF-Script wird von CF verarbeitet und gibt ein HTML Dokument aus.

3.Dieses HTML Dokument wird nun an den Browser gesendet.

4.Der Browser verarbeitet dieses Dokument Zeile für Zeile.
(Und lädt erst zu diesem Zeitpunkt irgendwelche Bilder)

------- Soweit erstmal der Teil ... nun weiter

da bild wird auch korrekt angezeigt, klappt aus irgendeinem unerfindlichen grund das auslesen der breite nicht unmittelbar nach dem einsetzen des bildes. folgende zeilen geben mir eben das richtige bild und eine breite von 0 aus

"...unmittelbar nach dem einsetzen des Bildes" ???
a. Wenn du Coldfusion und dein CF-Script(siehe oben 1.) meinst... da wird kein Bild eingesetzt sondern nur ein Link(Verweis) zur Quelle des Bildes. Da aber dort gar kein JavaScript ausgeführt wird wirst du wohl eher...

b.... Punkt 4. meinen. Und dabei spielt Coldfusion nicht mehr die geringste Rolle (in deinem Fall)!!!....

document.write("<img src='" + bilda.src + "' name='bild1'>");
document.write(document.bild1.width);

rein optisch sieht der source-code den der user bekommt gleich aus, nämlich immer die zeile
bilda.src = "../_upload/images/af340.jpg";
alles was coldfusion ist, ist für den user eben unsichtbar, wie es sich für eine serverseitige sprache gehört ;).

..... und das bermerkst du ja fast richtig! es ist nicht unsichtbar, es existiert gar nicht mehr.(Ablauf Punkt 1. 2. 3.)

der einzige unterschied ist eben, das mit coldfusion die breite 0 und ohne die breite korrekt angezeigt wird.

Nein! nein! nix! nada! Coldfusion!

warte ich zwischen schreiben des bildes und auslesen der breite ca. 10ms dann hat auch das script mit coldfusion den richtigen werte für die breite, allerdings funktioniert das nciht nach meiner methode, da ich nach dem timout nutnoch den wert auf einer sonst leeren seite stehen habe.

Neeeeeiiiiiiiiiinnnnnn ! Coldfusion hat nie irgendwelche Werte für Hoehe und Breite.(nie) Nur einen Verweis(Link) auf die Quelle des Bildes. Durch diesen Verweis auf die Quelle des Bildes weiss der Browser von wo aus er das Bild laden soll.(Punkt 4)

Um das Problem für dich selber zu lösen!!!! Lass Coldfusion mal ganz weg!!!!!!!!!

Und nun dazu, was du eigentlich willst!!! Du möchtest die Werte eines Bildes (Hoehe und Breite) ermitteln.
Grund ! Diese Werte sind dir nicht bekannt, weil dieses Bild dynamisch erzeugt wird oder was weiss ich...

Diese Werte kannst du erst ermitteln wenn das Bild auch zur Verfügung steht. Das heißt, wenn es vollständig geladen wurde !!! Dann kann das kleine Browsermänchen erst messen, wie hoch oder breit es ist.

Du hattest aber versucht die Werte schon zu ermitteln, als das Bild noch gar nicht geladen war. Dann wurden dir auch die richtigen Werte ausgegeben, nämlich 0 !!!

Dann hast du es mit einem Timeout probiert um zu erreichen das die Werte ermittelt werden können wenn das Bild da ist.(10ms)
Das geht auch nicht !!! Denn solange du das in deiner lokalen Rechnerumgebung machst funzt das vieleicht, aber auch nur solange der Datenzugriff schneller ist als der JavaScript Interpreter im Browser. Aber wenn jemand das Bild aus dem Netz lädt, kann das je nach Größe(KB) eine ungewisse Zeit dauern. (Anbindung, Netzlast etc.) Das fällt also weg!!!

Du must sicherstellen, das jenes Bild auch vollständig zur Verfügung steht wenn du die Werte ermitteln willst. Dazu bietet sich das onload Event an. Dieses wird erst dann ausgelöst wenn das entsprechende Objekt verfügbar, existent ist(vollständig).

Dann möchtest du diese Werte an das Dokument übergeben. Über writein() geht das aber nicht für ein schon bestehendes Dokument. Dazu musst du dich mit dynamischen HTML auseinandersetzen, wobei es unterschiedliche Lösungen für die unterschiedlichen Browsertypen gibt.

Denn so wie du das gemacht hast wird einfach ein neues Dokument erstellt Write() und so erscheinen auf dieser Seite auch nur die Werte die du übergeben hast.

Es gäbe da noch eine elegante Lösung, die hier auch schon öfters im Forum behandelt wurde, .... Frames !!!!

aber du schreibst....

frames scheiden leider aus :(

So bleibt nur noch die Möglichkeit es über zwei unterschiedliche Seiten zu machen, mit Parameterübergabe in der URL (beschrieben in einem Feature Artikel)

So das wars erstmal !!!

Kommentar:
Du hast hier eine ganze Menge durcheinander gewürfelt. Ich bezweifel das dein Lösungsweg mit dem Anpassen der Textarea überhaubt so funzt wie du dir das vorgestellt hast.
Gerade wenn man als Anfänger mit den ersten komplizierten Strukturen zu tun hat, kann es helfen erstmal einen Aufbauplan(Konstruktions-Shema) zu erstellen. Was will ich erreichen? Und was soll auf jedem kleinen Schritt dahin passieren. So arbeite ich heute noch und es ist bei Java auch nicht wegzudenken.

So wär die Frage vieleicht mit "Wie ermittel ich Hoehe und Breite eines Bildes Problem" schon etwas erfolgreicher.

Viel Glück noch !!

cu code2i