[Javascript] Seite per Ajax laden

ChristianK

Well-known member
ID: 85965
L
25 Mai 2006
92
1
Hi,

habe folgendes Problem: Ich habe eine Seite, die lädt per AJAX eine andere Seite. Die geladene Seite hat nun einen Javascript drin, der das Formular wieder per AJAX absendet. Soweit so gut, im Firefox klappt alles sehr gut.
Aber wie man es sich denken kann, nicht im IE. Dort lädt er die erste Seite wunderwar mit AJAX rein, jedoch will ich das Formular absenden, kommt ein Scriptfehler.

Fehler: Objekt erwartet


In der angegebenen Zeile steht folgendes:

HTML:
<input name="enter" type="button" value="Send" onClick="javascript:sende();">

Da kann aber kein Fehler sein. Wenn ich direkt im IE auf die Seite gehe, geht es auch da. Nur wenn ich vorher die Seite per AJAX reinlade, will er nicht mehr. :-/
Habe auch mal versucht, einfach eine Funktion zum Test anzulegen und diese aufzurufen, gleicher Fehler. Er kennt diese Funktion nicht....

Die Seite lade ich per AJAX in ein DIV-Element(.innerHTML). Kann es damit zu tun haben, dass er dabei kein Javascript mehr ausführt?
Wie kann ich das umgehen?


THX fürs lesen und hoffentlich für eure Hilfe :D
 
Habe mir gedacht, ich will nicht das ganze hier sprengen :D

Haupseite mit Ajaxrequest:

Div erstellen mit den Text drin(Also die ganze Seite)
HTML:
var tmptxt = document.createElement('div');
tmptxt.innerHTML = text;
this.window.appendChild(tmptxt);

Diese Seite wird per Ajax in den DIV geladen:
HTML:
<script type="text/javascript" src="lib/js/aform.js"></script>
<script type="text/javascript">
function sende(){
	var tmpie = Form.serialize('myform');
	loadPage('index.php', tmpie,'formless');
}
</script>

<div id="formless">
<form id="myform">
<input name="name" type="text"><br>
<textarea name="comment" cols="20" rows="3"></textarea><br>
[COLOR="Red"]<input name="enter" type="button" value="Send" onClick="javascript:sende();">[/COLOR]
</form>
</div>

Mehr Code braucht man eig. nicht. Der Rest geht ja auch. Ich glaube, der Fehler liegt im .innerHTML. Dabei wird wohl nicht der Javascript ausgeführt... Kann aber auch falsch sein, weil sonst dürfte es ja unter FireFox auch nicht gehen..

Edit:

Die Zeile die eigentlich Rot sein sollte, dort liegt der angebliche Fehler laut des IE.
 
Erstens ist onclick an sich ein Javascript Eventhandler und muss demzufolge nicht mit javascript: eingeleitet werden.

Und zweitens kann's sehr gut sein, dass das Javascript nicht ausgeführt wird. Prototype beispielsweise lässt eval() über den Responsetext laufen, damit enthaltenes Javascript ausgeführt wird.
 
Prototype löst das Ganze folgendermassen:
PHP:
   var contentType = response.getHeader('Content-type');
      if (this.options.evalJS == 'force'
          || (this.options.evalJS && this.isSameOrigin() && contentType
          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
        this.evalResponse();
    }

// ...

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },
Inwieweit Du das für Dich umsetzen kannst, weiss ich grad nicht, aber vielleicht hilft's ja weiter.
 
Bin gerade am probieren, aber wie ich das sehen, muss man 10x Funktion kopieren. Gibt es dazu keine einfachere Lösung?

Hab nun einen kleinen Code gefunden, der eig. auch gehen sollte:

var re = /<script\b[\s\S]*?>([\s\S]*?)<\//ig;
var match;
while (match = re.exec(req.responseText)) {
alert(match[1]);
eval(match[1]);
}

Er gibt die richtigen Funktionen zurück, jedoch hilft das auch nicht weiter. Nun meckert aber auch noch Firefox.
"sende is not definiert"
 
Zuletzt bearbeitet: