Comment ouvrir un fichier à l'aide de JavaScript?
J'ai une servlet qui écriture d'un fichier pdf en un ByteArrayOutputStream à la servlet flux de sortie.
Si j'ouvre l'URL du servlet le navigateur ouvre le fichier.
Mais si se produire une erreur sur le servlet, le navigateur ouvre un vide pdf avec un message d'erreur.
L'envoi d'une erreur par le biais de la ServletResponse le navigateur s'ouvre et affiche la page d'erreur par défaut.
Je veux envoyer un message d'erreur sans rediriger vers une page d'erreur ou de l'ouverture d'une défaillance de fichier pdf.
J'ai essayé:
new Ajax.Request('/pdfservlet', {
onSuccess: function(response) {
docWindow = window.open('','title');
docWindow.document.open('application/pdf');
docWindow.document.write(response);
docWindow.document.close();
},
onFailure: function(response) {
alert(response);
}
});
Mais, onSuccess ouvre une page avec
[object object]
Comment puis-je ouvrir un fichier PDF à l'aide de JavaScript?
OriginalL'auteur Daniel Moura | 2009-04-17
Vous devez vous connecter pour publier un commentaire.
Note: je suis en supposant que vous êtes en utilisant le Prototype cadre de la
Ajax.Demande
appel.La réponse de l'objet n'est pas destiné à être écrit directement, il n'a cependant
responseText
propriété qui doit contenir le retour de l'PDF.Avez-vous essayé:
(Avis de l'ajout
.responseText
)Edit: Ok, donc ça n'a pas de travail... Essayez quelque chose comme ceci:
Ce que cela va faire est de créer de la requête ajax, et en cas de succès de l'ouvrir dans une nouvelle fenêtre. L'ouverture de la nouvelle fenêtre doit être rapide et ne requiert en demandant au format PDF depuis le navigateur devrait être mis en cache pendant l'Ajax.Demande d'appel.
J'ai ajouté une nouvelle solution, c'est similaire à ce que rde6173 suggéré, mais s'appuie sur la mise en cache du navigateur.
le navigateur ne prend pas en cache. le pdf est requis deux fois.
configuré le servlet de cache. maintenant, est de travail.
Ouais, document.ouverte type mime arguments en dehors de la plage listés dans docs.sun.com/source/816-6408-10/document.htm#1196317 généralement ne fonctionne pas. Dans Safari et Chrome, pas de type mime autre que texte/html fonctionne.
OriginalL'auteur Ben S
Vous pouvez essayer un "deux-pass". Vous utiliser de l'Ajax pour appeler la servlet ( et si elle génère un fichier PDF à la volée, ont il le cache ). Si elle réussit, l'utilisateur est redirigé vers la servlet avec un paramètre de charge de la mise en cache PDF.
Il y a d'autres options, mais il dépend de la façon dont vous utilisez les fichiers Pdf.
Mon de 0,02 $..
OriginalL'auteur Ryan Emerle
Puisqu'il semble que vous envoyez votre document Pdf en tant que "inline" par opposition à "l'attachement" vous pourriez mettre l'URL du PDF dans un créé dynamiquement Iframe et puis joignez l'Iframe d'une superposition. Qui serait à l'œuvre.
-JP
OriginalL'auteur JP Richardson
Me semble qu'il serait mieux d'essayer de résoudre ce problème à la fin du serveur que tout cela fragiles besoin de se battre avec AJAX et les caches. Pourquoi est-ce une servlet erreur encore le " Content-Type: application/pdf’ en-tête avec son message d'erreur? Vérifier l'ordre des choses en envoyant la servlet; n'envoyez pas le "Content-Type" jusqu'à ce que vous avez créé le fichier PDF avec succès et qu'il soit prêt pour le retour.
Comment simplement le paramètre texte/html et de servir un agréable-la recherche page d'erreur? Ensuite, vous pouvez tout simplement un lien vers le fichier et laisser le navigateur soit le télécharger, ou de traiter l'erreur. Il peut être approprié d'inclure un “try again” recharger lien si c'est le genre d'erreur qui peut aller sur une deuxième tentative.
Cela fonctionne, mais je ne veux pas ouvrir une page d'erreur. Je veux montrer l'erreur dans la même page.
OriginalL'auteur bobince