![]() |
[AJAX] Kompletten Div aus neuer Seite austauschen?
Hi,
folgendes: Ich habe ein Formular. Auf Klick auf einen Button soll eine komplett neue Seite vom Server geladen werden (Querystring baut sich aus den Formulareingaben auf...), aus dieser neu geladenen Seite soll jedoch nur ein <DIV> - Block (inkl. seines Inhaltes) gegen ein anderes DIV-Element Element auf der bisherigen Seite ausgetauscht werden. Kurz: Suchfeld: Bei Klicken auf Suchen soll das Ergebnis anstelle des Formulars angezeigt werden. Kann mir da jemand nen Tipp geben wie der (unsichtbare) Aufruf der neuen Seite auszusehen hat und wie man dann auf diesem neuen Dokument an die Elemente kommt? Ich denke den Rest bekomme ich dann schon selber hin. |
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mich vor kurzem selbst mit AJAX beschäftigt, dabei ist folgende Testdatei entstanden (Anhang).
Wenn du aber NUR eine Seite anhand von Suchkriteren zum Benutzer bringen willst, dann kannst du auch auf AJAX verzichten (und dadurch auch ältere Browser ansteuern)... Dazu könntest du unter dein Formular einen IFrame Contaier setzten, welcher standardmäßig ausgeblendet ist. Nach Auswahl der Such Kriterien änderst du die Adresse des IFrames und zeigst 'ihn' dann an. |
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Zitat:
Aber danke, ich schau mir das morgen Früh mal an. |
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Zitat:
Wichtig bei AJAX ist, dass ein Fallback-Mode dahintersteckt. Du musst es nicht total weglassen, nur weil aeltere Browser oder Browser ohne natives XMLHttpRequest-Objekt das Zeug nicht immer moegen. Hier mal ein Beispiel: Anstatt der Zeile in deinem Code:
Code:
schreiben wir das:
<input id="form" type="button" onclick="SendRequest('http://localhost/ajax/test.txt');" value="Click Me" />
Code:
Nun muss SendRequest nur noch zurueckgeben, ob beim Erstellen und Senden des Requests alles ok ging. Wenn true zurueckkommt, gibt onclick false zurueck, und der Browser folgt dem Link nicht. Ist JS deaktiviert oder ging irgendwas nicht, folgt der Browser dem Link und du kannst ueber server-seitige Skripte das erledigen, was sonst ueber AJAX passiert waere :)
[url="index.html?foo=bar"]Click Me[/url]
Greetz alcaeus |
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Zitat:
Aber für offen zugängliche Anwendungen ist das sicher richtig und wichtig, ich behalts im Hinterkopf :) |
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Zitat:
Greetz alcaeus |
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Weiter im text:
Ich habe nun folgenden, objektorienten Code. Aufgerufen wird die ganze Aktion mit ' SwitchToResultView() ', damit wird ein Div erzeugt, der Back-Link eingefügt und der AJAX-Call gestartet. Ich bekomme sogar schon den Response-Text zurück. Mein grosses Problem: Obwohl ich auf dem Object this.theResultPane erzeuge und sogar an den asynchronen Aufruf explizit mit übergebe, ist dieses Objekt im asynchronen Handler nicht definiert. Wo hab ich denn da nen Denkfehler? Aso: Das Page-Wechseln klappt schon, also auch das zurückwechseln von der Result- zur Search-Ansicht. Nur das Schreiben vom Ergebnis ins richtige Div ist also das aktuelle Problem. Bin da wohl irgendwie out-of-Scope, aber ich kann mir das nicht erklären wo ich doch den Bereich explizit übergebe.
Code:
function searchobj()
{ this.searchbutton = null; this.isAdvanced = false; this.theAdvIframe = null; this.theSearchPane = null; this.theResultPane = null; this.isResultView = false; var p_ajaxObject = null; function getAjaxObj() { // Mozilla, Opera, Safari, IE7 and others if (typeof(XMLHttpRequest) != 'undefined') { p_ajaxObject = new XMLHttpRequest(); } else if (!p_ajaxObject && typeof(ActiveXObject) != 'undefined') { // IE6 and lower try { p_ajaxObject = new ActiveXObject("MsoXMLml2.XMLHTTP"); } catch(e) { try { p_ajaxObject = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { p_ajaxObject = null; } } } else { p_ajaxObject = null; } } function doAsyncResultQuery( searchstring ) { if (!p_ajaxObject) { getAjaxObj(); } if (p_ajaxObject) { var url = 'SearchPage.aspx?' + searchstring; p_ajaxObject.open("GET", url, true); p_ajaxObject.onreadystatechange = function() { onResultReceived(p_ajaxObject, this.theResultPane); }; p_ajaxObject.send(null); } else { Alert("AJAX Call failed due to missing HTTP Request Object.\nPlease activate ActiveX."); } } function onResultReceived(ajaxobj, resultpane) { if (ajaxobj.readyState == 4 && ajaxobj.status >= 200 && ajaxobj.status <= 299 && ajaxobj.responseText) { alert (resultpane); // <-- undefined ??? if (!resultpane) { alert("nochn scope problem"); } resultpane.getLastChild().innerHTML = ajaxobj.responseText; /* var div = document.getElementById('ResultView'); if (div != null) { div.innerHTML = ajaxobj.responseText; } else { alert("Div nicht gefunden..."); } */ } ajaxobj = null; } this.SwitchToResultView = function( changeBackHandler ) { // erst Suchstring holen und dann erst Suchfeld entfernen, sonst // sind die Eingaben nicht mehr auf dem Dokument verfügbar... // Baue Suchstring var searchstring = this.BuildSearchString(); if (this.isAdvanced) { try { searchstring += this.BuildAdvSearchString(); } catch (e) { // Date validation failed searchstring =""; alert(e); } } // entferne Suchfeld this.theSearchPane = document.getElementById('searchbox').firstChild; document.getElementById('searchbox').removeChild(this.theSearchPane); // erzeuge Resultpane this.theResultPane = document.createElement("div"); document.getElementById('searchbox').appendChild(this.theResultPane); // erzeuge 'Back to search' - Link var backlink = document.createElement("a"); backlink.setAttribute("href", "#"); backlink.appendChild(document.createTextNode("<< Back to Search")); addEvents(backlink, 'click', changeBackHandler, false); var backbutton = document.createElement("p"); backbutton.appendChild(backlink); this.theResultPane.appendChild(backbutton); // erzuge ResultView var resultview = document.createElement("div"); resultview.setAttribute("ID", "ResultView"); this.theResultPane.appendChild(resultview); // Call zur Suchanfrage absetzen: if (searchstring != "") { doAsyncResultQuery(searchstring); } this.isResultView = true; } this.SwitchToSearchView = function() { if (this.isResultView) { document.getElementById('searchbox').removeChild(this.theResultPane); document.getElementById('searchbox').appendChild(this.theSearchPane); this.theSearchPane = null; this.theResultPane = null; this.isResultView = false; } } } |
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Arg.. ich glaub ich habs selber rausgefunden :wall:
Zitat:
|
Re: [AJAX] Kompletten Div aus neuer Seite austauschen?
Es ist immer noch nicht vollbracht :-(
Ich habe inzwischen umgesattelt, das mit dem xmlhttp-Objekt klappt wohl offensichtlich gar nicht. Ich lade die Ergebnis-Seite nun ein einem IFrame nach. Sobald der iFrame das Suchergebnis komplett geladen hat, führt er folgendes aus:
Code:
this.theResultView ist übrigens ein Div der vorher erzeugt wurde.
this.OnDocumentLoaded = function()
{ // event handler for completed load in dynamic iframe if (this.loadMode == "search") { // get handle on result div var loadframe = document.getElementById("loadframe"); var doc = loadframe.contentWindow.document; this.theResultView.innerHTML = doc.body.innerHTML; this.isResultView = true; } this.loading = false; } Interessanterweise habe ich danach auf der Seite in dem div in dem das Ergebnis angezeigt werden soll den HTML-Quelltext der Ergebnisseite, aber das ist nicht das, was ich will. :-(( Leute, ich brauch echt ein wenig Hilfe. So hat das doch keinen Taug. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz