Moin allerseits,
Wie kann ich mit JavaScript die Link-Funktion nachbilden? Ich arbeite sehr viel mit jQuery.
Hintergrund: In meiner Applikation verwende ich verschiedene Protokolle, um verschiedene Aktionen zu realisieren. So erzeugt z.B. ein Link mit bereich:// ein neues div in der Mitte und lädt dorthin Dateien per AJAX.
Nun will ich, dass die dynamisch nachgeladenen Inhalte in PDF verarbeitet werden. Dafür habe ich einen Link mit dem Protokoll export:// gemacht. Beim KLick auf diesen Link wird das HTML eines bestimmten Bereiches auf der Seite ausgelesen und per AJAX als POST an eine PHP-Datei geschickt. Dort wird eine Ausgabe erzeugt (z.B. eine PDF-Datei) und temporär gespeichert, der Pfad zu dieser temporären Datei wird an meine Anwendung zurückgegeben.
Jetzt will ich diese Datei aufrufen. Wie bewerkstellige ich das? Ich habe schon versucht, einen Link zu erzeugen und einen Klick-Event darauf zu triggern. Aber bei HTTP passiert nichts. Wenn der Link, der erzeugt wird eins meiner eigener Protokolle hat, reagiert er korrekt. Aber wenn er das http-Protokoll hat, reagiert er nicht auf trigger(), sondern nur auf einen echten Klick mit der Maus.
Ein location.href() will ich nicht machen, weil dann alle anderen Änderungen in meiner Applikation verloren gehen. Mit window.open() klappt's, nur wird das als Popup geblockt und muss freigegeben werden.
Wie also bekomme ich hin, dass nach dem Abschicken des HTML per POST die URL, die zurückgegeben wird, in einem neuen Fenster aufgerufen wird?
Die JavaScript - Funktion:
$('a').click(
function(evt)
{
// Die URL in Bestandteile zerlegen
var href = parseUri($(this).attr("href"));
// bei Export-Protokoll
if (href['protocol']=="export")
{
// Standard-Reaktion wird unterbunden
evt.preventDefault();
// HTML wird ausgelesen
var bereich = $('#blabla').html();
$.ajax(
{
url : 'exportiere2pdf.php',
data : { 'html' : bereich },
type : 'post'
success : function (data)
{
// In data habe ich die URL zur temporären Datei.
// Wie rufe ich diese Datei nun auf?
}
}
);
}
if (href['protocol']=="bereich")
{
// Spezielle Aktionen zum Nachladen von Teilkomponenten per AJAX
evt.preventDefault();
}
}
);
Die Standard-Aktion wird nur bei den besonderen Protokollen unterbunden. D.h. http müsste normal funktionieren. Wenn ich aber in der Funktion nach success einen Link mit http:// erzeuge und ihn mit click triggere, reagiert er nicht. Ein Link mit bereich:// reagiert aber auf den Trigger.
Ich hoffe, mein Problem sauber beschrieben zu haben.
Grüße, JN
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de