AJAX(AHAH)-Problem: Links funktionieren nicht
Andreas
- javascript
0 Vinzenz Mai0 Andreas0 Sven Rautenberg0 Andreas
0 wahsaga0 molily
Hallo zusammen,
ich hätte folgendes Problem:
Wenn ich per xmlHTTPRequest und responseText eine HTML-Datei in meine Seite lade (geht über Firefox ja nur mit Seiten auf derselben Domain) gibt es Fehler, wenn ich von dieser geladenen Seite auf Links oder Buttons klicke.
Das Programm gibt einen Fehler aus, macht dann aber trotzdem eine neue Seite mit dem Link auf. Was ich bräuchte wäre, dass der Link in demselben Behälter aufgeht wie die Seite, die ich per Request geladen habe. Gibt es da eine Möglichkeit (evtl. auch auf der angefragten Seite, die kann ich ja beeinflussen) das zu bewerkstelligen? Der Fehler sollte natürlich dann auch nicht mehr auftauchen, wobei ich nicht weiß wieso der überhaupt auftritt, denn die Seite an sich läuft wenn sie nicht aus meiner Testseite aufgerufen wird.
Wäre nett, wenn mir jemand meinen Fehler sagen oder mir bei der Lösung des Problems behilflich sein könnte.
Der Code dazu:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
</head>
<body>
<script language="JavaScript" type="text/javascript">
var xmlHTTP = false;
try{
// FIREFOX etc.
xmlHTTP = new XMLHttpRequest();
} catch (w3c) {
try {
//neues Protokoll für den Internetexplorer
xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP");
} catch(msie) {
try {
//veraltetes Protokoll für den Internetexplorer
xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
} catch (msie_alt) {
// wenn alles schief läuft
alert("AJAX kann nicht geladen werden!");
}
}
}
function AsyncResult() {
var target = document.getElementById("Container");
if (xmlHTTP.readyState==4) {
if (xmlHTTP.status==200) {
target.innerHTML = xmlHTTP.responseText;
}
}
}
function DoIt(url) {
if (xmlHTTP) {
xmlHTTP.open('GET', url, true);
xmlHTTP.onreadystatechange=AsyncResult;
xmlHTTP.send(null);
}
}
</script>
<p><br>
<div id="Container">hier soll die Seite angezeigt werden </div>
<button onClick="DoIt('http://localhost/test/internetseite/ajax/ahah.html')">Zeige Seite an!</button>
</p>
</body>
</html>
Hallo Andreas,
Wäre nett, wenn mir jemand meinen Fehler sagen oder mir bei der Lösung des Problems behilflich sein könnte.
Dein Problem ist ganz einfach zu lösen: Erzeuge gültiges HTML.
Wieviele <html>-Elemente enthält ein gültiges HTML-Dokument?
Richtig, eines!
function DoIt(url) {
[...]
}
<div id="Container">hier soll die Seite angezeigt werden </div>
onClick="DoIt('http://localhost/test/internetseite/ajax/ahah.html')">Zeige Seite an!</button>
Du kannst nicht in ein <DIV>-Element ein komplettes HTML-Dokument "einfügen", ohne dass Fehler auftreten.
Die einfachste Lösung für Dein Problem wäre:
Verzichte auf den ganzen AJAX-Kram und ersetze das <DIV>-Element durch einen eingebetteten Frame. Willst Du AJAX haben, dann sorge dafür, dass Du nur solche Inhalte zurückbekommst, die Du in ein <div>-Element einfügen darfst.
Freundliche Grüße
Vinzenz
Du kannst nicht in ein <DIV>-Element ein komplettes HTML-Dokument "einfügen", ohne dass Fehler auftreten.
Die einfachste Lösung für Dein Problem wäre:
Verzichte auf den ganzen AJAX-Kram und ersetze das <DIV>-Element durch einen eingebetteten Frame. Willst Du AJAX haben, dann sorge dafür, dass Du nur solche Inhalte zurückbekommst, die Du in ein <div>-Element einfügen darfst.
Hallo Vincent,
danke für deine Antwort.
Ich möchte keine Frames auf meiner Seite haben. Kann mir jemand sagen, wie ich die Seiten trotzdem in mein Dokument einbetten kann oder wie ich die einzubettenden Seiten verändern muss um die Fehler zu umgehen?
Es genügt ja nicht einfach den <head>-Teil und die Tags <html> und <body> im einzubettenden Dokument wegzulassen, dann gibt es nämlich immer noch Fehler.
Moin!
Ich möchte keine Frames auf meiner Seite haben. Kann mir jemand sagen, wie ich die Seiten trotzdem in mein Dokument einbetten kann oder wie ich die einzubettenden Seiten verändern muss um die Fehler zu umgehen?
Ganz simpel: Schmeiß alles AJAX raus und schreibe die Navigation in alle Seiten rein. Und verwende normale HTML-Links.
AJAX ist nicht dafür da, Funktionen nachzubauen, für die es bereits perfekte Methoden gibt. Das Laden einer Seite nach Klick auf einen Link oder Button ist seit ewig Aufgabe von HTML-Links. Nutze sie.
Dein AJAX-Konstrukt funktioniert nämlich nur mit eingeschaltetem Javascript - und Suchmaschinen können den Buttons überhaupt nicht folgen.
Es genügt ja nicht einfach den <head>-Teil und die Tags <html> und <body> im einzubettenden Dokument wegzulassen, dann gibt es nämlich immer noch Fehler.
Es gibt Fehler? Welche? Meldungstext? Warum muß man dir alles aus der Nase ziehen?
- Sven Rautenberg
Das Problem war, dass ich eine Seite, die ebenfalls Ajax-Text enthielt aufgerufen habe und das hat mir ein "Objekt erwartet" ausgeworfen. Nach entfernen dieses Teils hat alles prima funktioniert. Danke euch für die Hilfe.
Gruß,
Andreas
hi,
Ich möchte keine Frames auf meiner Seite haben. Kann mir jemand sagen, wie ich die Seiten trotzdem in mein Dokument einbetten kann
Aus welchem Grund möchtest du sie denn überhaupt "einbetten" - und warum genügt kein ganz normaler Link auf diese Dokumente, um sie dann separat betrachten zu können?
gruß,
wahsaga
Hallo,
warum genügt kein ganz normaler Link auf diese Dokumente, um sie dann separat betrachten zu können?
Maaan, Hyperlinks sind doch sowas von 1996, ein Auslaufmodell! »Normale Links«, pff, »Dokumente«, pff, »separat betrachten«, pff, hast du den Schuss nicht gehört? Nur Uncoole halten daran fest! Rich Internet Applications und Single Page Applications sind gefragt. Steh doch dem Fortschritt nicht im Wege!
Mathias
Hallo,
Maaan, Hyperlinks sind doch sowas von 1996, ein Auslaufmodell!
1996? Da hatten den Links doch schon die Formularbuttons mit onclick="location.href='...'" den Rang abgelaufen ;-).
MfG, Thomas
Maaan, Hyperlinks sind doch sowas von 1996, ein Auslaufmodell!
1996? Da hatten den Links doch schon die Formularbuttons mit onclick="location.href='...'" den Rang abgelaufen ;-).
War das nicht:
<td onmouseover=window.loaction.href="..">
Struppi.
Hallo,
War das nicht:
<td onmouseover=window.loaction.href="..">
gut moeglich, an mouseover-Events bei Tabellenzellen unter Netscape 2 kann ich mich nicht mehr richtig erinnern, aber Formulare und JS waren voll kewl.
MfG, Thomas