Frage

Ich habe ein Skript, das eine Download zwingt und ich einen Anruf an diesem via Javascript zu machen. Allerdings wird das Dialogfeld öffnet sich nicht, hier ist das download.php Skript:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

Hier ist die Javascript (mit jQuery):

///force download
           $.ajax({
           type: "GET",
           url: "download.php",
           data: 'file=' + msg + '&properFilename=' + properFileName,
           success: function(msg){

              window.location.href = msg;

         });//ajax

Diese Umleitungen meinem Browser auf eine andere Seite, anstatt die unten im Dialogfeld zeigt.

Ich weiß, dass die JS Variable msg die Datei mit den richtigen Header enthält, aber ich weiß nicht, was damit zu tun, um das Download-Dialogfeld zu erhalten angezeigt werden soll.

Dank all

P. S. Haben Sie nicht wissen, wo dieses Thema JS oder PHP zu setzen.

EDIT:

Ich habe das Recht Ansatz, den ich von diesem :) sicher bin - Ein Benutzer auf meiner Website kommt, füllen sie in einer Form, und sie drücken muss. Nach einigen Sekunden ihre fle in einem Dialogfeld angezeigt sollen, die sie herunterladen können. Um dies zu tun:

Ich mache einen AJAX-Aufruf die Datei und laden Sie es zu bekommen. Ich benutze das PHP-Skript die Header zu senden. Alles was ich jetzt brauche, ist ein Weg, um das dowload Dialogfeld zu zeigen !! zu bekommen

War es hilfreich?

Lösung

Es ist nicht zeigt das Dialogfeld für die Tatsache, dass sein ein Ajax-Aufruf.

window.location.href = msg;

Das ist, was man ist umleitet. Ich glaube nicht, dass Sie einen Ajax-Aufruf brauchen hier, rufen Sie einfach die Seite normalerweise mit einem href-Link.

Bearbeiten

Wenn Sie das Formular wollen für den Download um das Dialogfeld zu unterwerfen und zeigen, dies tun:

<script>
function showDialogBox(form) {
    form.submit();
    window.location.href = "/download.php?file=XXX&properFilename=XXX";
}
</script>
<form onsubmit="showDialogBox(this);">

</form>

Andere Tipps

Wenn es voll download.php Skript, das ich nicht in sie Variable $ file (nur $ filename) finden können - aber in JS Sie einen $ Dateivariable senden. Zweitens: etwas falsch in JS - warum Sie solche Variablennamen msg in data: und in success: verwenden

Meine Meinung ist, dass dies zu erwarten ist, wie sktrdie Noten. Ich kann jetzt nicht testen, aber wenn man darüber nachdenkt: Der Benutzer, per se, bekommt keine Benachrichtigung über AJAX Zeug Sie tun. plötzlich eine solche Nachricht zu haben wäre irritierend.

Ich denke, dass, wenn Sie erstellen (auch versteckt?) Iframe auf dieser Seite und leiten zu dieser Download-URL, die Sie diesen Dialog erhalten würden. YMMV, HTH.

Ich habe nicht codiert PHP für eine Weile so bin ich nicht sicher, ob es etwas falsch mit Ihrem Code. Aber ich denke, das Problem in Ihrem Ansatz. Sie müssen download.php in einem Rahmen laden nicht als Antwort auf einen Ajax-Aufruf. Also im Grunde brauchen Sie ein unsichtbares iframe in dem Dokument zu bilden, und verweisen Sie whith die GET-Parameter an die URL angehängt download.php.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top