2010-07-23 8 views
1

Tous,Télécharger le fichier pdf à partir d'une chaîne en utilisant Jquery

J'ai une application PHP5 écrite avec Zend Framework et MVC. Sur ma page d'accueil, je souhaite incorporer la fonctionnalité pour télécharger un fichier pdf généré dynamiquement. La façon dont cela est fait est:

  1. L'utilisateur clique sur le lien "Télécharger le fichier".
  2. Sur clic, un appel AJAX se produit sur un contrôleur PHP, qui prend les données du formulaire, génère le pdf et le renvoie sous forme de chaîne.
  3. Ma fonction javascript a maintenant la chaîne pdf.
  4. Comment afficher une boîte de dialogue "Ouvrir/Enregistrer" pour télécharger le fichier pdf à partir de javascript?

J'ai le code suivant:

<script type="text/Javascript"> 
    $('#dlcontent').click(function(e) { 
     $.ajax({ 
       type: 'POST', 
       url: "/downloads/dlpolicies", 
       data: $("#frmMyContent").serialize(), 
       cache: false, 
       dataType: "html", 
       success: function(html_input){ 
        alert(html_input); // This has the pdf file in a string. 
        //ToDo: Open/Save pdf file dialog using this string.. 
       } 
      }); 
}); 
</script> 

Merci

Répondre

0

La façon la plus simple de le faire est ouvert une nouvelle fenêtre avec l'URL de la chaîne de pdf.

0

Ajoutez un élément à votre page où vous voulez que le lien aille. Cela peut être un span ou un div ou une cellule dans une table ou tout ce que vous voulez. Donnez-lui un identifiant unique. Utilisez ensuite jQuery pour définir le code HTML de cet élément. Je l'appelle somepageelement ici.

$('#dlcontent').click(function(e) { 
     $.ajax({ 
       type: 'POST', 
       url: "/downloads/dlpolicies", 
       data: $("#frmMyContent").serialize(), 
       cache: false, 
       dataType: "html", 
       success: function(html_input){ 
        $('#somepageelement').html('<a href="' + html_input + '">Click here to download the pdf</a>'); 
       } 
      }); 
}); 
+0

La question est "#dlcontent" est lui-même un lien pour télécharger le fichier pdf. Puis-je le faire à travers une fenêtre pop-up? Avec ceci, je n'ai pas besoin de cliquer sur 2 liens pour télécharger un fichier. – Jake

+0

@vincent Ah d'accord, désolé pour le malentendu. Dans ce cas, je ne sais pas pourquoi vous avez besoin d'Ajax pour le faire. Je voudrais avoir un formulaire qui poste sur une page qui génère le pdf et spécifie le 'target =" _ nouveau "' sur le formulaire afin qu'il s'ouvre dans une nouvelle fenêtre. Si vous voulez, vous pouvez faire en sorte que le fait de cliquer sur '# dlcontent' soumette le formulaire. – theycallmemorty

1

Je voudrais essayer de garder cela simple. Juste sumbit la forme avec un target="_blank" et puis PHP force le téléchargement du fichier.

HTML CODE

<script type="text/Javascript"> 
$('#dlcontent').click(function(e) { 
    e.preventDefault(); 
    $("#frmMyContent").submit(); 
}); 
</script> 

<form id="formMyContent" action="/downloads/dlpolicies" target="_blank" ... > 
... 
</form> 

ensuite sur votre côté serveur, vous devez indiquer à PHP d'envoyer la réponse en "téléchargement".

Code PHP

$this->getResponse() 
    ->setHeader('Content-Disposition', 'attachment; filename=result.pdf') 
    ->setHeader('Content-type', 'application/pdf'); 

obtenu ceci d'ici: Zend Framework how to set headers

+0

hmm..Comment puis-je forcer la chaîne pdf dans result.pdf? – Jake

+0

Le type de contenu devrait être "application/pdf", comme il a été standardisé il y a un certain temps. –

+0

@ ScottStafford merci! actualisé. – jessegavin

Questions connexes