Extjs 4 téléchargement d'un fichier à travers un appel ajax
Le problème est très simple: j'ai télécharger un fichier quand je soumettre un formulaire, c'est un appel ajax lorsque le formulaire est soumis, ce qui me permet de construire un fichier avec les données de la forme, côté serveur et envoyer un lien à une alerte. Le fait est que mon patron souhaitez que le fichier soit téléchargé directement et non par l'intermédiaire d'un lien dans un message d'alerte. J'ai donc assurez-vous que le fichier est disponible côté serveur par le biais de la tornade(web):
self.set_header('Content-Type', 'application/octet-stream')
self.set_header('Content-Disposition', 'attachment; filename=clients_counter.zip')
with open("static/clients_counter.zip", 'r') as f:
while True:
data = f.read()
if not data:
break
self.write(data)
self.finish()
Du côté serveur, le code semble fonctionner très bien, mais le côté client (extjs4.1) c'est vraiment un cauchemar. C'est ainsi que mon appel ajax dirait que maintenant, et ça ne fonctionne pas:
Ext.Ajax.request({
method : "GET",
url : 'http://whatever.com/count?client='+client+'&start='+start+'&end='+end,
timeout : 30000,
success :
function (response) {
//Ext.Msg.alert(response.responseText);
desktop.getWindow('count-win').doClose();
return response;
}//handler,
failure :
function(response) {
alert("Wrong request");
}});
OriginalL'auteur softwareplay | 2013-12-10
Vous devez vous connecter pour publier un commentaire.
Après avoir lu sur diverses sources de Ext JS forum et ici dans stackoverflow, ci-dessous est l'approche que j'ai choisi (à l'aide de Ext JS version 4.2.1):
Est-il de toute façon à appliquer un "traitement télécharger" masque lors du téléchargement d'un fichier?
Je doute qu'il est possible avec la solution ci-dessus, car le formulaire est fermé peu après que le navigateur télécharge le fichier.
Je sais que c'est vieux, mais est-il possible d'inclure jsonData dans la norme soumettre en quelque sorte? Je peux le faire avec
Ext.Ajax.request
, mais ne peut pas comprendre comment le faire fonctionner avecform.submit
...je l'ai mis dans un code et mon navigateur (FireFox) ne pas télécharger quoi que ce soit, il vient d'ouvrir dans un autre onglet.
OriginalL'auteur sakadas
J'ai eu un problème similaire en train de télécharger un Fichier Excel dans un appel Ajax je l'ai résolu de cette façon:
Faire un standard de soumettre à la place de l'Ajax.
Après cela, vous devriez être en mesure de revenir au fichier désiré.
Vous n'avez pas à gérer la réponse car c'est un standard soumettre. Je pensais la même chose la première fois que j'ai fait il, regardez: stackoverflow.com/questions/18434962/...
Est-il un moyen de mettre en œuvre un "traitement du fichier" masque?
OriginalL'auteur Jonathan Caballero
Je pense que vous pouvez prendre une beaucoup plus facile solution. Oublier l'ajax, et juste obtenir un bon vieux js pour ouvrir le fichier pour vous:
Cela permettra d'ouvrir un nouvel onglet et démarrer le téléchargement à partir de là.
OriginalL'auteur Kyle Fransham
Après l'extraction/de la lecture de nombreux posts, j'ai réussi à obtenir cette simple méthode de travail..
OriginalL'auteur John
J'ai juste eu à l'annonce du succès de la fonction de la requête ajax:
Vous êtes toujours l'ouverture d'une fenêtre avec une url ... j'aurais le navigateur invitant la fenêtre de téléchargement en changeant le type de réponse ...
Avec la norme soumettre approche
OriginalL'auteur softwareplay
Le code suivant utilisé pour télécharger le fichier à l'aide de extjs 5 ou 6. Ajoutez le code suivant à la méthode et l'invoquons pour le bouton d'action. Cette télécharge le fichier directement insteadof ouverture dans un nouvel onglet.
utiliser une iframe comme ceci:
Copié la réponse de extjs forum
Option:2
Si vous voulez ouvrir le fichier dans un nouvel onglet
OriginalL'auteur Sudhakar