URL-Aufruf in JS ohne HTML-Ausgabe
Karl
- javascript
Hi,
habe folgendes Frage, ob man unter JS irgendwie eine URL aufrufen kann und den HTML-Output im Nirwana "verschwinden" lassen kann.
Hintergrund ist eigentlich nur, dass ich in einer Oracle-Portal Umgebung (Apache mit modPLSQL) eine Datenbankprozedur innerhalb JS aufrufen will und diese neben einem Dummy-Output
(<html><head><meta http-equiv="expires" content="0"></head><body></body></html>)
eigentlich nur DB-Funktionen hat, z.B. ein Insert in eine Tabelle zu machen etc.
Hab schon mal rumgesucht und immer nur die relativ aufwändige Lösung über so 'ne AJAX-Mimik mit xmlhttp (inklusive IE6-Behandlung) gefunden - läuft auch einwandfrei.
Nur für mich zur "Beruhigung": gibt es da keine einfachere Lösung wie oben mal so naiv angedacht?
Danke
Karl
Yerf!
Hab schon mal rumgesucht und immer nur die relativ aufwändige Lösung über so 'ne AJAX-Mimik mit xmlhttp (inklusive IE6-Behandlung) gefunden - läuft auch einwandfrei.
So aufwendig sollte das eigentlich gar nicht sein (außer der Fallunterscheidung für die IEs, die braucht ein paar Zeilen)
Nur für mich zur "Beruhigung": gibt es da keine einfachere Lösung wie oben mal so naiv angedacht?
Einen versteckten IFrame in den du die Ausgabe lenkst halte ich jetzt nicht unbedingt für einfacher und eine andere Möglichkeit dürfts wohl nicht geben...
Gruß,
Harlequin
Hi,
Einen versteckten IFrame in den du die Ausgabe lenkst halte ich jetzt nicht unbedingt für einfacher und eine andere Möglichkeit dürfts wohl nicht geben...
wenn ich es richtig verstehe, geht es lediglich um den Request, und den bekommt man auch mit einem Image() hin.
Cheatah
Moin!
Hintergrund ist eigentlich nur, dass ich in einer Oracle-Portal Umgebung (Apache mit modPLSQL) eine Datenbankprozedur innerhalb JS aufrufen will und diese neben einem Dummy-Output
(<html><head><meta http-equiv="expires" content="0"></head><body></body></html>)
eigentlich nur DB-Funktionen hat, z.B. ein Insert in eine Tabelle zu machen etc.Hab schon mal rumgesucht und immer nur die relativ aufwändige Lösung über so 'ne AJAX-Mimik mit xmlhttp (inklusive IE6-Behandlung) gefunden - läuft auch einwandfrei.
Nur für mich zur "Beruhigung": gibt es da keine einfachere Lösung wie oben mal so naiv angedacht?
Doch, die gibt es: Wenn du statt Inhalt mit HTTP-Status 200 vom Server keinen Inhalt und HTTP-Status 204 "No Content" zurückschickst.
Die anderen Alternativen wurden schon genannt: Versteckter IFrame oder Image auswechseln (da liefert der Server dann aber besser auch ein Image als Pseudoinhalt zurück, eventuell ja sogar in Abhängigkeit vom DB-Erfolg).
- Sven Rautenberg
Hi,
Danke für die schnellen Antworten ...
Wenn ich das richtig verstehe, ist immer ein Objekt (IFrame oder Image) auf der Webseite nötig, in welches ich den Output "verschwinden" lasse.
Das ist eigentlich auch nicht das, was ich wollte. Dann lasse ich AJAX-Lösung weil die autark einsetzbar ist und auch sonst klaglos funktioniert.
Danke noch mal für die "Beruhigungspille" ... ;)
Karl
Wenn ich das richtig verstehe, ist immer ein Objekt (IFrame oder Image) auf der Webseite nötig, in welches ich den Output "verschwinden" lasse.
Das ist falsch, wie Sven auch sagte.
Struppi.
Yerf!
Das ist falsch, wie Sven auch sagte.
Die Frage dabei ist, in wie weit er in die "Oracle-Portal Umgebung" eingreifen kann um dies zu erreichen.
Gruß,
Harlequin
Das ist falsch, wie Sven auch sagte.
Die Frage dabei ist, in wie weit er in die "Oracle-Portal Umgebung" eingreifen kann um dies zu erreichen.
ok. dann lass diese Umgebung mal weg,wir haben also einen ganz normalen Apache-Web-Service mit einer modPLSQL (wie z.B. im Kern bei Oracle-APEX)
Ich habe also eine URL in der Form http://servername:port/db_proz und die macht irgend eine Datenbank-Transaktion.
Dass ich über ein vorhandenes IFrame der "Größe"=0 mit parent[Framename].location.href = URL diese ausführen kann (und analog auch mit einem image) ist mir jetzt auch klar. Aber das bedingt immer ein vorhandenes Objekt auf der Webseite - und das ist auch nicht so unbedingt gewollt.
@Struppi
Das ist falsch, wie Sven auch sagte.
@Sven
Doch, die gibt es: Wenn du statt Inhalt mit HTTP-Status 200 vom Server keinen Inhalt und HTTP-Status 204 "No Content" zurückschickst
ja sicher, wenn ich den HTML-Output weg lasse kommt die 204 - aber welchen Vorteil habe ich davon? Wieso brauche ich dann kein vorhandenes IFrame/Image?
Karl
Yerf!
ja sicher, wenn ich den HTML-Output weg lasse kommt die 204 - aber welchen Vorteil habe ich davon? Wieso brauche ich dann kein vorhandenes IFrame/Image?
Du kannst direkt location.href benutzen. Da 204 "no content" besagt wird der Browser die aktuelle Seite stehen lassen, er hat ja keinen Inhalt bekommen mit dem er diese Seite ersetzen könnte.
Alternativ müsste man dann JS ganz weglassen können und ein <a href="..."> sollte auch reichen...
(Ein bischen mit Vermutung das ganze, da ich 204 bisher nur zusammen mit Formularen kenne, aber da funktioniert das so)
Gruß,
Harlequin
@Struppi
Das ist falsch, wie Sven auch sagte.
@Sven
Doch, die gibt es: Wenn du statt Inhalt mit HTTP-Status 200 vom Server keinen Inhalt und HTTP-Status 204 "No Content" zurückschickstja sicher, wenn ich den HTML-Output weg lasse kommt die 204 - aber welchen Vorteil habe ich davon? Wieso brauche ich dann kein vorhandenes IFrame/Image?
wie Harlequin sagte, du kannst das wie einen normalen Link anlegen, wenn der Server mit 204 antwortet passiert nichts im Browser. Wenn du hier einen Useraccount hast kannst du in deinen Benutzereinstellungen z.b. den "fachlich hilfreich" Link so einstellen, dass keine neue Seite kommt.
Struppi.
moin moin
wie Harlequin sagte, du kannst das wie einen normalen Link anlegen, wenn der Server mit 204 antwortet passiert nichts im Browser. Wenn du hier einen Useraccount hast kannst du in deinen Benutzereinstellungen z.b. den "fachlich hilfreich" Link so einstellen, dass keine neue Seite kommt.
ok. hier im Forum klappt das - bei mir nicht
hab den HTML_Output aus der DB-Prozedur rausgenommen und
sowohl als Link unter HTML als auch in JS mit window.open poppt eine leere Seite auf mit Quelltext:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY><PRE></PRE></BODY></HTML>
auf - woher auch immer ???
hab mal die meta-Daten verglichen ... eigentlich haben wir nur die Zeile
<META NAME="robots" CONTENT="all">
zusätzlich drin - aber die hat doch eigentlich nur was mit Suchmaschinen zu tun ?!
Karl
ok. hier im Forum klappt das - bei mir nicht
hab den HTML_Output aus der DB-Prozedur rausgenommen und
sowohl als Link unter HTML als auch in JS mit window.open poppt eine leere Seite auf mit Quelltext:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Darum geht es nicht, du musst nur den Status code 204 senden. Keine Ahnung was du auf dem Server hast, mit Perl würde das in etwa so aussehen:
use CGI;
print CGI::header(-status => 204);
Struppi.
Darum geht es nicht, du musst nur den Status code 204 senden. Keine Ahnung was du auf dem Server hast, mit Perl würde das in etwa so aussehen:
ja - das war's!
hab auch unter Oracle was gefunden - die Proz.
sys.owa_util.status_line(204,'reason-text');
löst das Problem
allerdings nur für den Link.
beim open.window kommt nach wie vor die leere Seite :(
Karl
Yerf!
allerdings nur für den Link.
beim open.window kommt nach wie vor die leere Seite :(
Naja, wenn du sagts, öffne ein Fenster, dann macht der Browser das (außer der PopUp-Blocker ist dagegen) egal, was dann da als Inhalt reinkommt. Wenn es denn unbedingt JS sein muss (wieso eigentlich?), dann nimm doch location.href="URL".
Gruß,
Harlequin
Yerf!
... dann nimm doch location.href="URL".
ja - sorry - mit Blindheit geschlagen.
Das ging früher nicht weil ich Status 204 nicht zurückgegeben hatte - aber jetzt funktioniert es ja.
Der bestehende Fensterinhalt bleibt erhalten - die DB-Transaktionen werden ausgeführt. Im Falle einer Exception oder inhaltlicher Fehler gebe ich dann aber wieder HTML-Code im selben Fenster aus.
Thx an alle für die schnelle Hilfe!
Karl
allerdings nur für den Link.
beim open.window kommt nach wie vor die leere Seite :(
Wozu willst du ein Fenster öffnen?
Struppi.