Question

J'ai un script qui force le téléchargement et j'appelle via javascript. Cependant, la boîte de dialogue ne s'affiche pas, voici le script download.php:

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();

Voici le Javascript (utilisant JQuery):

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

              window.location.href = msg;

         });//ajax

Ceci redirige mon navigateur vers une autre page plutôt que d'afficher la boîte de dialogue déroulante.

Je sais que la variable JS contient le fichier avec les en-têtes appropriés, mais je ne sais pas quoi en faire pour que la boîte de dialogue de téléchargement s'affiche.

Merci à tous

p.s. Je ne savais pas où mettre ce fil JS ou PHP.

EDIT:

J'ai la bonne approche, j'en suis sûr :) - Un utilisateur visite mon site, il remplit un formulaire et appuie sur Soumettre. Après quelques secondes, leur fichier doit apparaître dans une boîte de dialogue qu'ils peuvent télécharger. Pour ce faire:

Je passe un appel AJAX pour obtenir le fichier et le télécharger. J'utilise le script PHP pour envoyer les en-têtes. Maintenant, tout ce dont j'ai besoin est un moyen de faire apparaître la boîte de dialogue de téléchargement!

Était-ce utile?

La solution

Cela ne montre pas la boîte de dialogue car c'est un appel Ajax.

window.location.href = msg;

C’est ce qui vous redirige. Je ne pense pas que vous ayez besoin d’un appel ajax ici, appelez simplement la page avec un lien href.

modifier

Si vous souhaitez que le formulaire soit envoyé et affiche la boîte de dialogue du téléchargement, procédez comme suit:

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

</form>

Autres conseils

S'il s'agit d'un script download.php complet, je n'y trouve pas la variable $ file (uniquement un fichier $ filename) - mais dans JS, vous envoyez une variable $ file. Deuxièmement: quelque chose qui cloche dans JS - pourquoi vous utilisez un tel nom de variable msg dans données: et dans success: ?

Mon avis est que cela peut être attendu, comme le note sktrdie. Je ne peux pas tester pour le moment, mais si vous y réfléchissez bien: l'utilisateur, en tant que tel, ne reçoit aucune notification concernant ce que vous faites avec AJAX. Avoir soudainement un tel message serait irritant.

Je suppose que si vous créez un iframe (même caché?) sur cette page et que vous le redirigez vers cette URL de téléchargement, vous obtiendrez cette boîte de dialogue. YMMV, HTH.

Je n'ai pas codé php depuis un moment donc je ne suis pas sûr qu'il y ait un problème avec votre code. Mais je pense que le problème réside dans votre approche. Vous devez charger download.php dans un cadre et non en réponse à un appel ajax. Donc, en gros, vous devez former un iframe invisible dans le document et le diriger vers download.php avec les paramètres get ajoutés à l’URL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top