2010-04-11 5 views
1

Il existe ce service Web tiers. L'une des méthodes web publiques disponibles est une méthode GetDocument(). Cette méthode renvoie un objet Document. L'objet Document a des propriétés pour File (byte []), ContentType (string) ect. Ma question: Puis-je m'abonner à ce service en utilisant javascript (mootools) + ajax + JSON, renvoyer l'objet document, dans ce cas un document Excel, et forcer le téléchargement du fichier?Télécharger le fichier en utilisant ajax et webservice

Répondre

2

Il est vrai que vous ne pouvez généralement pas lancer de téléchargement à partir de JavaScript, mais il existe un composant flash, Downloadify, qui active la génération de fichiers côté client.

Donc vous pouvez servir des fichiers à télécharger à partir de HTML/JavaScript.

Avec ce problème résolu, vous avez toujours le problème de savoir comment obtenir les données que vous souhaitez servir à partir du service Web source.

Une tierce partie implique XSS (cross-site scripting) qui est un non-no utilisant XmlHttpRequest (Ajax).

Une solution possible à ce problème pourrait être d'utiliser une technique IFrame cachée commune pour obtenir les données. Il suffit de disposer d'un formulaire approprié (masqué?) Qui est correctement envoyé au service Web et de pointer action vers un élément IFrame caché sur lequel vous interceptez l'événement Load et analysez les données renvoyées. Mais les navigateurs actuels ont des niveaux de sécurité différents qui limitent votre capacité à accéder aux IFrames avec une source externe. Vous êtes donc bloqué ici. Désolé d'avoir vos espoirs. La seule manière robuste et pratique d'accomplir ce que vous voulez faire est d'avoir un script côté serveur local qui peut servir de proxy entre votre HTML/JavaScript et le service Web externe. En utilisant un tel proxy, vous pouvez simplement utiliser Ajax pour que vos données soient utilisées avec Downloadify. Mais alors, puisque vous utilisez un script de serveur pour obtenir les données, pourquoi ne pas simplement servir les données du script pour le téléchargement?

Ce ne sont que mes observations sur le problème que vous présentez.

Questions connexes