Télécharger le fichier excel avec appel ajax
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle('TestMessages');
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=test_form_".date("Y-m-d_H:i:s").".xls");
//If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
Quand je l'appel ci-dessus le code directement à partir du navigateur, le fichier est téléchargé. Mais si je fais un appel ajax de code ci-dessus, je n'ai pas l'invite de téléchargement. Je peux le voir dans l'onglet console, que l'appel ajax a été complété avec succès et un tas de caractères aléatoires est vu dans les données de réponse. Je suis en supposant que c'est l'objet excel.
Personne ne sait comment je peux obtenir le téléchargement excel à l'aide d'ajax? Je ne veux pas d'actualiser la page. Lorsque l'utilisateur clique sur le bouton "exporter", il devrait y avoir un appel ajax vers le fichier php et invite l'utilisateur à télécharger.
Je reffer Le passage des données à partir de PHP classe PHPExcel via AJAX, mais ne comprends pas comment faire pour atteindre mon objectif?
- Vous pouvez ajouter un iframe caché dans la page. Lors de l'appel ajax retourne l'url de la création de données, l'utilisation de javascript pour rediriger l'iframe pour que l'url qui déclenche automatiquement le téléchargement d'action.
Vous devez vous connecter pour publier un commentaire.
PHP
JS
Pourquoi ne pas vous rediriger vers la page qui a téléchargé le fichier excel lorsque vous cliquez sur le bouton
Vous n'avez pas besoin d'Ajax.
À l'aide de javascript
window.location.replace()
si vous obtenez une url qui envoie un fichier, il vous invite à être téléchargé sans rediriger le navigateur.Si vous avez besoin de publier des données, vous pouvez créer une forme cachée avec le champs de configurer la façon dont vous en avez besoin, assurez-vous que la "cible" de l'attribut de la forme est définie à
"_BLANK"
, et ensuite envoyer le formulaire par programmation.Pour le premier commentaire ci-dessous :
peut-être essayer de la remplacer :
avec
readfile ($file_name);
readfile ($file_name);
mais ne me donne pas d'invite.J'ai résolu mon problème en manière suivante.
ajouter target=_blank dans votre ajax succès fonction comme ci-dessous
Sur le succès de ouvrir une nouvelle fenêtre avec my_url.