HighDots Forums  

location.replace in div mit ajax oder auf eigener Website - Problem

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss location.replace in div mit ajax oder auf eigener Website - Problem in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Jakobus Schuerz - usenet
 
Posts: n/a

Default location.replace in div mit ajax oder auf eigener Website - Problem - 10-12-2009 , 02:50 PM






Ich hab folgenden Codeschnippsel auf einer Seite, welches mit das Pdf
automatisch runterladen soll.

<script type="text/javascript">
window.setTimeout("location.replace('/pfad/zum/Pdf.pdf')", 1000);
</script>

Diese Website rufe ich ohne aktiviertem Javascript über eine eigene
Adresse auf, dort funktioniert der automatische Download genau so wie er
soll.
Wenn aber Javascript aktiviert ist, soll diese Webseite mittels Ajax auf
der Hauptseite nachgeladen werden, was auch wiederum wunderbar
funktioniert. Allerdings streikt dann der automatische Download.
Nachdem das aber schon einmal funktioniert hat, weiß ich nun überhaupt
nicht mehr weiter.
Die Pdf-Datei existiert, ist auch über einen Link ansprechbar (als
Fallback, wenn der automatische Download nicht geht...) und exakt jener,
der im window.setTimeout-Befehl verwendet werden sollte.

Und ich hab keine Idee mehr, woran das liegen könnte :-(

lg jakob - etwas verzweifelt

--
The UNIX way of Sex:
gunzip-strip-touch-finger-mount-fsck-more-yes-umount-sleep

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-12-2009 , 03:06 PM






Jakobus Schuerz - usenet wrote:
^^^^^^^^
Muss das sein?

Quote:
Ich hab folgenden Codeschnippsel auf einer Seite, welches mit das Pdf
automatisch runterladen soll.

script type="text/javascript"
window.setTimeout("location.replace('/pfad/zum/Pdf.pdf')", 1000);
/script

Diese Website rufe ich ohne aktiviertem Javascript über eine eigene
Adresse auf, dort funktioniert der automatische Download genau so wie er
soll.
Wenn aber Javascript aktiviert ist, soll diese Webseite mittels Ajax auf
der Hauptseite nachgeladen werden, was auch wiederum wunderbar
funktioniert. Allerdings streikt dann der automatische Download.
Nachdem das aber schon einmal funktioniert hat,
Hoffentlich bist Du endlich einmal über die proprietäre innerHTML-
Eigenschaft gestolpert -- das wäre nämlich eine heilsame Erfahrung.
Nirgendwo steht geschrieben, dass der Inhalt von mit `innerHTML' eingefügten
SCRIPT-Elementen der Script-Engine übergeben werden muss bzw. dann genauso
funktionieren muss als wenn er normal geladen worden wäre.

Quote:
lg jakob - etwas verzweifelt
1. <http://validator.w3.org/>

2. Wenn Du statt `innerHTML' den Dokument(unter)baum Knoten für Knoten
aufbaust (oder importierst), so wie es das W3C-DOM vorschreibt, sind die
Chancen grösser, dass es funktioniert.

3. Ganz sicher kannst Du natürlich nur sein, wenn Du den Script-Code separat
lieferst und explizit ausführst; mit JSON geht der Transport nur als
String-Literal, sonst auch direkt über eine FunctionExpression.

Falls nichts davon hilft, wirst Du schon *etwas* mehr Code zeigen müssen.


PointedEars

Reply With Quote
  #3  
Old   
Jakobus Schuerz - usenet
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-12-2009 , 07:15 PM



Thomas 'PointedEars' Lahn schrieb:
Quote:
Jakobus Schuerz - usenet wrote:
^^^^^^^^
Muss das sein?
Ja. ;-)


Quote:
Hoffentlich bist Du endlich einmal über die proprietäre innerHTML-
Eigenschaft gestolpert -- das wäre nämlich eine heilsame Erfahrung.
Nirgendwo steht geschrieben, dass der Inhalt von mit `innerHTML' eingefügten
SCRIPT-Elementen der Script-Engine übergeben werden muss bzw. dann genauso
funktionieren muss als wenn er normal geladen worden wäre.
Na, warum so geladen? Bin Javascript-Anfänger und versuche mich gerade
einmal auf den Boden zu kriegen. Kenn noch nicht mal wirklich die
Grobheiten, wie soll ich da schon die Feinheiten von JS kennen? :-)

Quote:
lg jakob - etwas verzweifelt

1. <http://validator.w3.org/

2. Wenn Du statt `innerHTML' den Dokument(unter)baum Knoten für Knoten
aufbaust (oder importierst), so wie es das W3C-DOM vorschreibt, sind die
Chancen grösser, dass es funktioniert.

3. Ganz sicher kannst Du natürlich nur sein, wenn Du den Script-Code separat
lieferst und explizit ausführst; mit JSON geht der Transport nur als
String-Literal, sonst auch direkt über eine FunctionExpression.

Falls nichts davon hilft, wirst Du schon *etwas* mehr Code zeigen müssen.
Aber du hast mir gute Stichworte gegeben. der W3-Validator hat mir gutes
bescheinigt.

Dein zweiter Punkt hat mich dann dort hin gebracht, wo ich hin wollte.
Denn du hattest recht, ich hab mir diese Funktion irgendwo aus dem Netz
heimgebracht und sie hat eigentlich gut gemacht, was ich wollte. Nur
halt wurden keine Skripte ausgeführt...
Dann hab ich mir das näher angeschaut und versucht zu verstehen, was das
Ding denn da überhaupt macht, und sah das innerHTML.

Nun ja, statt der Zeile
"if (callback) callback.innerHTML = req.responseText;"
habe ich 4 andere Zeilen nach langem Überlegen und probieren eingebaut.
Nämlich:
"while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);"

Die Zeile mit while löscht alle allfällig vorhandenen Kinder von
callback - dem Div-Container (in meinem Falle) - falls da irgendwas
drinnen steht.
mit createElement erzeuge ich einen neuen div-Container, in den ich mit
innerHTML den Rückgabetext von req.responseText reinschreibe.
Das hatte ich so schon öfter probiert, aber es kam nur unformatierter
und nicht behandelter Text im Browser an. Also ging ich daran und
importiere mit appendChild diesen neue Div-Container in callback. Somit
wird der durch die Skript-Engine und den Renderer gewurschtelt und macht
das, was er tun sollte.
Schön ausschauen und die Skripte die darin sind, ausführen.

Ich hoffe, ich hab das auch richtig verstanden... Aber so in etwa ist
meine Auffassung von dem Skript.

Hier noch mein fertiges Skript, welches ich dazu benutze, Um meine
Ajax-Anfrage an einen Server zu stellen:


function ajaxPost(url, postData, callback) {
var req;
try {
req = window.XMLHttpRequest ? new XMLHttpRequest(): new
ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// browser does not have ajax support
}
req.onreadystatechange = typeof callback == 'function' ? callback :
function() {
if (req.readyState == 4 && req.status == 200) {
if(typeof callback == 'string') callback =
document.getElementById(callback);
while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);

}
}
document.getElementById(callback).innerHTML = ('<div
class="ajaxloader"><img src="img/ajax-loader.gif" \ alt="Lade"><br>Lade
Inhalt</div>');
req.open('POST', url, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(postData);

return false;
}


lg jakob

--
The UNIX way of Sex:
gunzip-strip-touch-finger-mount-fsck-more-yes-umount-sleep

Reply With Quote
  #4  
Old   
Christian Kirsch
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-13-2009 , 04:38 AM



Jakobus Schuerz - usenet schrieb:
Quote:
Thomas 'PointedEars' Lahn schrieb:
Jakobus Schuerz - usenet wrote:

Hoffentlich bist Du endlich einmal über die proprietäre innerHTML-
Eigenschaft gestolpert -- das wäre nämlich eine heilsame Erfahrung.
Nirgendwo steht geschrieben, dass der Inhalt von mit `innerHTML' eingefügten
SCRIPT-Elementen der Script-Engine übergeben werden muss bzw. dann genauso
funktionieren muss als wenn er normal geladen worden wäre.

....

Nun ja, statt der Zeile
"if (callback) callback.innerHTML = req.responseText;"
habe ich 4 andere Zeilen nach langem Überlegen und probieren eingebaut.
Nämlich:
"while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);"

Wie geht das zusammen mit "ich habe keine Ahnung von JS und will hier
was lernen"? Thomas hat Dir doch erklärt, dass innerHTML nicht
zuverlässig das tut, was Du erreichen willst, warum benutzt Du es hier
wieder?
Ein DOM-Element "callback" zu nennen, finde ich etwas ungeschickt. Mit
"callback" verbindet man gemeinhin eine Funktion.

Quote:
Hier noch mein fertiges Skript, welches ich dazu benutze, Um meine
Ajax-Anfrage an einen Server zu stellen:


function ajaxPost(url, postData, callback) {
var req;
try {
req = window.XMLHttpRequest ? new XMLHttpRequest(): new
ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// browser does not have ajax support
}
req.onreadystatechange = typeof callback == 'function' ? callback :
function() {
if (req.readyState == 4 && req.status == 200) {
if(typeof callback == 'string') callback =
document.getElementById(callback);
Lesbarer Code ist was anderes. Sooo knapp sind Variablen in JavaScript
ja nun nicht, dass man da nicht noch eine spendieren könnte.

Quote:
while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);

}
}
document.getElementById(callback).innerHTML = ('<div
Ich kann mir nur schwer vorstellen, dass das funktioniert. Wenn ich mich
nicht irre, ist "callback" an dieser Stelle entweder eine Funktion
(s.o.: typeof callback == 'function') oder ein DOM-Element (callback =
document.getElementById(callback)). Mit beidem als Parameter sollte
getElementById() eigentlich nichts Benutzbares liefern.

Reply With Quote
  #5  
Old   
Jakobus Schuerz - usenet
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-13-2009 , 09:51 AM



Christian Kirsch schrieb:
Quote:
Jakobus Schuerz - usenet schrieb:

Quote:
Wie geht das zusammen mit "ich habe keine Ahnung von JS und will hier
was lernen"? Thomas hat Dir doch erklärt, dass innerHTML nicht
zuverlässig das tut, was Du erreichen willst, warum benutzt Du es hier
wieder?
Weil ich dringend ein funktionierendes Skript brauche, und dieses hier
tut, was es soll. Auch im IE ;-)
Ich werde mich ja sowieso noch tiefer in die Materie einarbeiten. Nur
als flotter Workaround halt das hier.

Quote:
Ein DOM-Element "callback" zu nennen, finde ich etwas ungeschickt. Mit
"callback" verbindet man gemeinhin eine Funktion.
Das hab ich von der Vorlage übernommen.

Quote:
Hier noch mein fertiges Skript, welches ich dazu benutze, Um meine
Ajax-Anfrage an einen Server zu stellen:


function ajaxPost(url, postData, callback) {
var req;
try {
req = window.XMLHttpRequest ? new XMLHttpRequest(): new
ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// browser does not have ajax support
}
req.onreadystatechange = typeof callback == 'function' ? callback :
function() {
if (req.readyState == 4 && req.status == 200) {
if(typeof callback == 'string') callback =
document.getElementById(callback);

Lesbarer Code ist was anderes. Sooo knapp sind Variablen in JavaScript
ja nun nicht, dass man da nicht noch eine spendieren könnte.
Wie gesagt, ist von der Vorlage.

Quote:
while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);

}
}
document.getElementById(callback).innerHTML = ('<div

Ich kann mir nur schwer vorstellen, dass das funktioniert. Wenn ich mich
nicht irre, ist "callback" an dieser Stelle entweder eine Funktion
(s.o.: typeof callback == 'function') oder ein DOM-Element (callback =
document.getElementById(callback)). Mit beidem als Parameter sollte
getElementById() eigentlich nichts Benutzbares liefern.

Im Firefox funktioniert das jetzt (das Skript, welches die aufgerufene
php-Seite liefert, wird ausgeführt, ein Dokument wird automatisch
runtergeladen.)
In Opera und IE8, sowie kazehakaze (webkit) funktioniert es nicht.

Aber ich bitte euch, mir ein wenig zu Seite zu stehen.
Ich rufe eine externe Seite auf, die über einen Systemcall ein Programm
am Server ausführt, welches aufgrund der Formulardaten auf der Seite ein
Pdf erzeugt.
Und ich möchte die Ergebnisseite incl. automatischem Download auf der
ursprünglichen Seite mittels Ajax einbinden.

Erzeuge ich mit createTextNode ein neues Child und hänge es an den
ursprünglichen Node (hier noch callback genannt) an, erscheint einfach
nur der Text.
Wie kann ich diesen gelieferten html-Code so in die Seite einbauen,
damit er vollständig "behandelt" wird und voll funktionsfähig ist?

lg jakob
--
The UNIX way of Sex:
gunzip-strip-touch-finger-mount-fsck-more-yes-umount-sleep

Reply With Quote
  #6  
Old   
Christian Kirsch
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-13-2009 , 10:35 AM



Jakobus Schuerz - usenet schrieb:

Quote:
Weil ich dringend ein funktionierendes Skript brauche, und dieses hier
tut, was es soll. Auch im IE ;-)
Weiter unten schreibst Du, dass es im IE8 nicht läuft.

Quote:
Im Firefox funktioniert das jetzt (das Skript, welches die aufgerufene
php-Seite liefert, wird ausgeführt, ein Dokument wird automatisch
runtergeladen.)
In Opera und IE8, sowie kazehakaze (webkit) funktioniert es nicht.

Aber ich bitte euch, mir ein wenig zu Seite zu stehen.
Du hast jetzt von zwei Leuten Hinweise bekommen, die Du weitgehend
ignoriert hast. Du lieferst keine vernünftige Fehlerbeschreibung
("funktioniert nicht" ist etwas, was nur Du für sinnvoll hältst).

Quote:
Ich rufe eine externe Seite auf,
die über einen Systemcall ein Programm
am Server ausführt, welches aufgrund der Formulardaten auf der Seite ein
Pdf erzeugt.
Und ich möchte die Ergebnisseite incl. automatischem Download auf der
ursprünglichen Seite mittels Ajax einbinden.
Den Hinweis von Thomas auf vollständigen, verständlichen Quellcode
ignorierst Du ebenfalls. Prosa hilft nicht, auch nicht, wenn man sie mit
Buzzwords wie "Ajax" aufpeppt.

Reply With Quote
  #7  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-13-2009 , 01:02 PM



Jakobus Schuerz - usenet wrote:

Quote:
Thomas 'PointedEars' Lahn schrieb:
Jakobus Schuerz - usenet wrote:
^^^^^^^^
Muss das sein?

Ja. ;-)
Wie Du unschwer erkannt hast, war das eine rhetorische Frage. Bitte
weglassen. Es gibt keinen vernünftigen Grund dafür, insbesondere nicht
bei Berücksichtigung Deines Newsreaders.

Quote:
Hoffentlich bist Du endlich einmal über die proprietäre innerHTML-
Eigenschaft gestolpert -- das wäre nämlich eine heilsame Erfahrung.
Nirgendwo steht geschrieben, dass der Inhalt von mit `innerHTML'
eingefügten SCRIPT-Elementen der Script-Engine übergeben werden muss bzw.
dann genauso funktionieren muss als wenn er normal geladen worden wäre.

Na, warum so geladen? Bin Javascript-Anfänger und versuche mich gerade
einmal auf den Boden zu kriegen. Kenn noch nicht mal wirklich die
Grobheiten, wie soll ich da schon die Feinheiten von JS kennen? :-)
Das war eine allgemeine Bemerkung. Doch wie heisst es so schön: Getroffene
Hunde bellen. (Und mit JS-Kenntnissen hat das relativ wenig zu tun, auch
wenn hier eine ECMAScript-Implementation benutzt wird, um aufs DOM
zuzugreifen.)

Quote:
[...]
2. Wenn Du statt `innerHTML' den Dokument(unter)baum Knoten für Knoten
aufbaust (oder importierst), so wie es das W3C-DOM vorschreibt, sind
die Chancen grösser, dass es funktioniert.
[...]

Falls nichts davon hilft, wirst Du schon *etwas* mehr Code zeigen müssen.

[...]
Dein zweiter Punkt hat mich dann dort hin gebracht, wo ich hin wollte.
Sieht nicht so aus.

Quote:
Denn du hattest recht, ich hab mir diese Funktion irgendwo aus dem Netz
heimgebracht und sie hat eigentlich gut gemacht, was ich wollte. Nur
halt wurden keine Skripte ausgeführt...
Dann hab ich mir das näher angeschaut und versucht zu verstehen, was das
Ding denn da überhaupt macht, und sah das innerHTML.
Ach?[tm]

Quote:
Nun ja, statt der Zeile
"if (callback) callback.innerHTML = req.responseText;"
habe ich 4 andere Zeilen nach langem Überlegen und probieren eingebaut.
Nämlich:
"while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);"
Ist immer noch derselbe Müll, nur mehr.

Quote:
Die Zeile mit while löscht alle allfällig vorhandenen Kinder von
callback - dem Div-Container (in meinem Falle) - falls da irgendwas
drinnen steht.
Das ändert aber natürlich am innerHTML-Müll nichts.

Quote:
mit createElement erzeuge ich einen neuen div-Container, in den ich mit
innerHTML den Rückgabetext von req.responseText reinschreibe.
Das hatte ich so schon öfter probiert, aber es kam nur unformatierter
und nicht behandelter Text im Browser an. Also ging ich daran und
importiere mit appendChild diesen neue Div-Container in callback. Somit
wird der durch die Skript-Engine und den Renderer gewurschtelt und macht
das, was er tun sollte.
Schön ausschauen
Schönheit liegt ja bekanntlich im Auge des Betrachters. Ich finde den Code
ein Augenkrebsrisiko und einen potentiellen Wartungsalbtraum.

Quote:
und die Skripte die darin sind, ausführen.
Nein, nachweislich nicht.

Quote:
Ich hoffe, ich hab das auch richtig verstanden... Aber so in etwa ist
meine Auffassung von dem Skript.

Hier noch mein fertiges Skript, welches ich dazu benutze, Um meine
Ajax-Anfrage an einen Server zu stellen:
[...]
Siehe (diesmal nicht zufällige) Sig.


PointedEars
--
Die Bereitschaft fühlender Wesen, Deinen Code näher anzuschauen, liegt
wohl selbst auf logarithmischen Skalen unter Null (das geht genau dann,
wenn der Leidensdruck dieser Wesen beim Anschauen größer wird als die
mathematische Notwendigkeit für Werte größer Null). -- Dietmar Meier

Reply With Quote
  #8  
Old   
Jakobus Schuerz - usenet
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-14-2009 , 05:28 AM



Thomas 'PointedEars' Lahn schrieb:
Quote:
Jakobus Schuerz - usenet wrote:

Thomas 'PointedEars' Lahn schrieb:
Jakobus Schuerz - usenet wrote:
^^^^^^^^
Muss das sein?
Ja. ;-)

Wie Du unschwer erkannt hast, war das eine rhetorische Frage. Bitte
weglassen. Es gibt keinen vernünftigen Grund dafür, insbesondere nicht
bei Berücksichtigung Deines Newsreaders.
Ich hab einen guten Grund, das hinzuschreiben, deshalb steht es auch
dort. Denn mein Icedove/Thunderbird hat ca 15 Mailadressen mit
unterschiedlichen Einstellungen/Identitäten zu verwalten, und eine
eindeutige Bezeichnung erleichtert mir unheimlich den Zugriff auf die
richtige Identität (die unterscheiden sich z.T. nur durch angehängte Sig
oder eben nicht...)

Ich stör mich ja auch nicht an deinem "PointedEars" - auch wenn es dein
Spitzname zu sein scheint. Gibt für mich nämlich auch keinen Grund, den
als sinnvoll zu erachten ihn hier hinzuschreiben.

Danke.

[...]

Quote:
Das war eine allgemeine Bemerkung. Doch wie heisst es so schön: Getroffene
Hunde bellen. (Und mit JS-Kenntnissen hat das relativ wenig zu tun, auch
wenn hier eine ECMAScript-Implementation benutzt wird, um aufs DOM
zuzugreifen.)
Mag sein. Ich beschäftige mich seit kurzem mit dem Thema, und bin noch
auf der Suche nach guter Literatur.
Ungelernte Hunde wissen noch nicht im richtigen Moment richtig zu reagieren.
:-P

Quote:
[...]
2. Wenn Du statt `innerHTML' den Dokument(unter)baum Knoten für Knoten
aufbaust (oder importierst), so wie es das W3C-DOM vorschreibt, sind
die Chancen grösser, dass es funktioniert.
[...]

Falls nichts davon hilft, wirst Du schon *etwas* mehr Code zeigen müssen.
[...]
Dein zweiter Punkt hat mich dann dort hin gebracht, wo ich hin wollte.
Doch, denn ich beschäftige mich gerade mit DOM und JSON sehr intensiv
und bin mittlerweile ein gutes Stück weiter.

Quote:
Sieht nicht so aus.

Denn du hattest recht, ich hab mir diese Funktion irgendwo aus dem Netz
heimgebracht und sie hat eigentlich gut gemacht, was ich wollte. Nur
halt wurden keine Skripte ausgeführt...
Dann hab ich mir das näher angeschaut und versucht zu verstehen, was das
Ding denn da überhaupt macht, und sah das innerHTML.

Ach?[tm]
Loriot?

Quote:
Nun ja, statt der Zeile
"if (callback) callback.innerHTML = req.responseText;"
habe ich 4 andere Zeilen nach langem Überlegen und probieren eingebaut.
Nämlich:
"while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);"

Ist immer noch derselbe Müll, nur mehr.
Der Müll ist mehr, aber ich versteh jetzt endlich, wie ich Elemente zum
DOM hinzufüge, verändere und wieder wegnehme. Und ich spiel auch schon
ein wenig damit herum. Ist ganz interessant. ;-)
Z.b. hab ich ein kleines Skriptchen zum leeren des betreffenden Divs um
es mit neuem Inhalt zu füllen vorher mit innerHTML gemacht, jetzt mache
ich es mit DOM. Das ist ein Fortschritt in der Erkenntnis für mich.

Quote:
Die Zeile mit while löscht alle allfällig vorhandenen Kinder von
callback - dem Div-Container (in meinem Falle) - falls da irgendwas
drinnen steht.

Das ändert aber natürlich am innerHTML-Müll nichts.
Das mag schon sein. Von euch ist ja nicht wirklich herauszubekommen, wie
ich einen Text und einen Link in meine Website so nachträglich einbauen
kann, dass der Link nach dem Laden des Codeschnippsels automatisch
heruntergeladen wird (und je nach Userwunsch im PDF-Reader geöffnet oder
gespeichert).

Quote:
mit createElement erzeuge ich einen neuen div-Container, in den ich mit
innerHTML den Rückgabetext von req.responseText reinschreibe.
Das hatte ich so schon öfter probiert, aber es kam nur unformatierter
und nicht behandelter Text im Browser an. Also ging ich daran und
importiere mit appendChild diesen neue Div-Container in callback. Somit
wird der durch die Skript-Engine und den Renderer gewurschtelt und macht
das, was er tun sollte.
Schön ausschauen

Schönheit liegt ja bekanntlich im Auge des Betrachters. Ich finde den Code
ein Augenkrebsrisiko und einen potentiellen Wartungsalbtraum.
Das mag sein. Ich hab noch keine Erfahrung in Javascript-Programmierung.
Die äussere Form des Codeschnippsels stammt auch nicht von mir, und
enspricht dem, was ich vielfach im Internet herumliegen gesehen habe.
Hab mich nur daran mal angehalten.

So what. Ich will keinen Schönheitswettbewerb gewinnen, sondern erstmal
rasch dieses kleine Problem gelöst haben. Umd schönen Code mach ich mir
später, wenn ich mehr Zeit habe, Sorgen.

Quote:
und die Skripte die darin sind, ausführen.

Nein, nachweislich nicht.
Das hab ich auch schon festgestellt...
Aber mehr als den Hinweis, dass es nicht funktioniert und das Stichwort
JSON ist hier noch nicht gefalle. Ach ja. schirch wäre mein Code, und
für euch nicht interessant.

Quote:
Ich hoffe, ich hab das auch richtig verstanden... Aber so in etwa ist
meine Auffassung von dem Skript.

Hier noch mein fertiges Skript, welches ich dazu benutze, Um meine
Ajax-Anfrage an einen Server zu stellen:
[...]

Siehe (diesmal nicht zufällige) Sig.
Danke. Ich glaub, mein Auftrag in dieser NG ist damit erledigt.
Soviel Suderei ist mir im Usenet noch selten untergekommen.

Vielleicht findet sich ja jemand, der mir doch noch helfen und nicht nur
meckern will.

Es gibt auch Anfänger, auch wenn man nach vielen Jahren im Geschäft das
nicht mehr glauben kann.

jakob

PS: die Botschaft hab ich wohl verstanden. Ich denk mir meinen Teil.


--
The UNIX way of Sex:
gunzip-strip-touch-finger-mount-fsck-more-yes-umount-sleep

Reply With Quote
  #9  
Old   
Sebastian Neubert
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-14-2009 , 06:12 AM



Jakobus Schuerz - usenet schrieb:
Quote:
Das hab ich auch schon festgestellt...
Aber mehr als den Hinweis, dass es nicht funktioniert und das Stichwort
JSON ist hier noch nicht gefalle. Ach ja. schirch wäre mein Code, und
für euch nicht interessant.
Hallo,

ich hab mir das oben stehende mal mit durchgelesen, und obwohl ich
eigentlich kaum Ahnung von JS oder ECMA habe, wurde meine Frage, wie es
denn nun richtig geht, nicht beantwortet.

Eine kurze Googlesuche mit dem Begriff "innerHTML" brachte mich auf
folgende Seite[1] und den dazugehörigen Codeschnipsel. Auch hier wird
bemängelt, dass Script nicht ausgeführt wird, wenn man ihn nachträglich
per innerHTML einfügt.


var script = document.createElement("script");
script.setAttribute('type','text/javascript');
script.text='alert(\'hallo\');';
document.getElementById("xyz").appendChild(script) ;


Ersetz mal dein JS-Code mit dem alert und das xyz mit deinem div und
dann poste mal das Ergebnis. Getestet habe ich es nicht, doch es
interessiert mich.

@PointedEars: ich lese schon eine Weile in dieser Gruppe mit, und man
merkt, dass du richtig was auf dem Kasten hast. Allerdings finde ich,
dass dein Umgangston nicht immer angemessen ist.

Viele Grüße,
Sebastian

[1]
<http://forum.jswelt.de/javascript/23126-script-per-innerhtml-div-einf-gen.html>

Reply With Quote
  #10  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: location.replace in div mit ajax oder auf eigener Website - Problem - 10-14-2009 , 08:04 AM



Jakobus Schuerz - usenet wrote:

Quote:
Thomas 'PointedEars' Lahn schrieb:
Jakobus Schuerz - usenet wrote:
Thomas 'PointedEars' Lahn schrieb:
Jakobus Schuerz - usenet wrote:
^^^^^^^^
Muss das sein?
Ja. ;-)

Wie Du unschwer erkannt hast, war das eine rhetorische Frage. Bitte
weglassen. Es gibt keinen vernünftigen Grund dafür, insbesondere nicht
bei Berücksichtigung Deines Newsreaders.

Ich hab einen guten Grund, das hinzuschreiben, deshalb steht es auch
dort. Denn mein Icedove/Thunderbird hat ca 15 Mailadressen mit
unterschiedlichen Einstellungen/Identitäten zu verwalten, und eine
eindeutige Bezeichnung erleichtert mir unheimlich den Zugriff auf die
richtige Identität (die unterscheiden sich z.T. nur durch angehängte Sig
oder eben nicht...)
Die Identität muss man nicht im From-Header speichern, dafür hat das
eiskalte Händ^WTäubchen eigene Felder. Weiss ich aus eigener Erfahrung.

Quote:
[...]
2. Wenn Du statt `innerHTML' den Dokument(unter)baum Knoten für Knoten
aufbaust (oder importierst), so wie es das W3C-DOM vorschreibt, sind
die Chancen grösser, dass es funktioniert.
[...]

Falls nichts davon hilft, wirst Du schon *etwas* mehr Code zeigen
müssen.
[...]
Dein zweiter Punkt hat mich dann dort hin gebracht, wo ich hin wollte.

Doch, denn ich beschäftige mich gerade mit DOM und JSON sehr intensiv
und bin mittlerweile ein gutes Stück weiter.
Wirklich weiter bist Du erst, wenn Du gelernt hast, `innerHTML' zu vermeiden
und trotzdem den Script-Code auszuführen.

Quote:
Nun ja, statt der Zeile
"if (callback) callback.innerHTML = req.responseText;"
habe ich 4 andere Zeilen nach langem Überlegen und probieren eingebaut.
Nämlich:
"while(callback.firstChild) callback.removeChild(callback.lastChild);
var tmpnode = document.createElement("div");
tmpnode.innerHTML = req.responseText;
callback.appendChild(tmpnode);"

Ist immer noch derselbe Müll, nur mehr.

Der Müll ist mehr, aber ich versteh jetzt endlich, wie ich Elemente zum
DOM hinzufüge, verändere und wieder wegnehme. Und ich spiel auch schon
ein wenig damit herum. Ist ganz interessant. ;-)
Z.b. hab ich ein kleines Skriptchen zum leeren des betreffenden Divs um
es mit neuem Inhalt zu füllen vorher mit innerHTML gemacht, jetzt mache
ich es mit DOM. Das ist ein Fortschritt in der Erkenntnis für mich.
Ich kann erraten, was Du meinst; nur: `innerHTML' ist auch DOM. Es ist
bloss nicht Bestandteil des *W3C*-DOM API. Und genau das ist das Problem:
Wo es keinen Standard gibt, nach dem man sich richten kann, macht jeder
(Hersteller), was er will.

Quote:
Die Zeile mit while löscht alle allfällig vorhandenen Kinder von
callback - dem Div-Container (in meinem Falle) - falls da irgendwas
drinnen steht.

Das ändert aber natürlich am innerHTML-Müll nichts.

Das mag schon sein. Von euch ist ja nicht wirklich herauszubekommen, wie
ich einen Text und einen Link in meine Website so nachträglich einbauen
kann, dass der Link nach dem Laden des Codeschnippsels automatisch
heruntergeladen wird (und je nach Userwunsch im PDF-Reader geöffnet oder
gespeichert).
Du hast's ja noch nicht mal versucht. Übrigens werden Links _nicht_
heruntergeladen.

Quote:
mit createElement erzeuge ich einen neuen div-Container, in den ich mit
innerHTML den Rückgabetext von req.responseText reinschreibe.
Das hatte ich so schon öfter probiert, aber es kam nur unformatierter
und nicht behandelter Text im Browser an. Also ging ich daran und
importiere mit appendChild diesen neue Div-Container in callback. Somit
wird der durch die Skript-Engine und den Renderer gewurschtelt und macht
das, was er tun sollte.
Schön ausschauen

Schönheit liegt ja bekanntlich im Auge des Betrachters. Ich finde den
Code ein Augenkrebsrisiko und einen potentiellen Wartungsalbtraum.

Das mag sein. Ich hab noch keine Erfahrung in Javascript-Programmierung.
Hat mit "Javascript" (was soll das sein?)-Programmierung nichts zu tun,
sondern mit Programmierung ganz allgemein. Christian hat's ja schon
erklärt, Du liest bloss nicht zu.

Quote:
Die äussere Form des Codeschnippsels stammt auch nicht von mir, und
enspricht dem, was ich vielfach im Internet herumliegen gesehen habe.
Hab mich nur daran mal angehalten.
Ganz schlechte Idee.

Quote:
So what. Ich will keinen Schönheitswettbewerb gewinnen, sondern erstmal
rasch dieses kleine Problem gelöst haben. Umd schönen Code mach ich mir
später, wenn ich mehr Zeit habe, Sorgen.
Mit dieser Einstellung: später = nie. Vertrau mir.

Quote:
und die Skripte die darin sind, ausführen.

Nein, nachweislich nicht.

Das hab ich auch schon festgestellt...
Aber mehr als den Hinweis, dass es nicht funktioniert und das Stichwort
JSON ist hier noch nicht gefalle. Ach ja.
Tut mir echt leid für Dich. Du solltest wirklich auf Rückerstattung der
Supportkosten bestehen.

Quote:
schirch wäre mein Code,
"schirch"?

Quote:
und für euch nicht interessant.
Interessant schon, wenn er lesbar wäre.

Quote:
Ich hoffe, ich hab das auch richtig verstanden... Aber so in etwa ist
meine Auffassung von dem Skript.

Hier noch mein fertiges Skript, welches ich dazu benutze, Um meine
Ajax-Anfrage an einen Server zu stellen:
[...]

Siehe (diesmal nicht zufällige) Sig.

Danke. Ich glaub, mein Auftrag in dieser NG ist damit erledigt.
Was war denn Dein "Auftrag" hier? Erst dumme Fragen zu stellen, dann die
*trotzdem* angebotene Hilfe zu ignorieren, und dann Dich auch noch zu
*beschweren*, weil das zu nichts führte? Danke, dass dieser "Auftrag"
endlich erledigt ist.

Quote:
Soviel Suderei ist mir im Usenet noch selten untergekommen.
"Suderei"?

Quote:
Vielleicht findet sich ja jemand, der mir doch noch helfen und nicht nur
meckern will.
Wenn Du die richtigen Fragen stellst ...

Quote:
Es gibt auch Anfänger, auch wenn man nach vielen Jahren im Geschäft das
nicht mehr glauben kann.
Hat damit nichts zu tun. Auch Anfänger dürfen vor dem Posten ihr Gehirn
einschalten.

Quote:
PS: die Botschaft hab ich wohl verstanden. Ich denk mir meinen Teil.
Hättest Du es mal getan.

<http://www.catb.org/~esr/faqs/smart-questions.html>


Score adjusted

PointedEars

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.