2010-06-23 3 views
1

Je souhaite effectuer une requête GET asynchrone qui renvoie un document avec un type de contenu MIME et l'amène à afficher la boîte de dialogue 'Enregistrer' du navigateur .

Auparavant, je fabriquais un HTTP régulier (non-async) appeler par un lien et la réponse renvoyée avait un 'Content-Type' et 'Content-Disposition' comme ceci:

Content-Type: text/plain 
Content-Disposition: attachment; 
    filename=genome.jpeg; 
    modification-date="Wed, 12 Feb 1997 16:29:51 -0500"; 

Est il existe un moyen de convertir cela en requête $ .ajax() GET de jQuery? La méthode $ .ajax ne prend en charge que les types de données, "xml", "html", "script", "json", "jsonp" et "text". Est-ce que mon type de données de réponse tomberait dans l'une de ces catégories?

Ma demande ressemble à ceci:

$.ajax({url: myUrl, 
    data: params, 
    type: "GET", 
    success: function(data) 
    { 
     console.log("try to save this file!"); 
    }, 
    error: function(req, status, errThrown){ 
     alert("ERROR: Something happened"); 
    } 

Dans le rappel de « succès », je vois le contenu du fichier transmis en arrière dans la variable « données » comme un texte simple mais besoin de la « sauver » boîte de dialogue pour obtenir lancé sur le navigateur.

Le serveur renvoie la réponse avec le jeu d'en-têtes correct.

Répondre

2

Je ne connais aucun moyen d'obtenir une vraie requête Ajax pour ouvrir une boîte de dialogue de sauvegarde. Cela n'a rien à voir avec les en-têtes envoyés par le serveur.

Si vous souhaitez afficher par programme une boîte de dialogue de sauvegarde, vous pouvez utiliser jQuery pour ajouter un cadre iFr caché à la page avec l'URL comme src. Cela devrait apparaître dans la boîte de dialogue si nécessaire.

+0

@Pointy, pouvez-vous s'il vous plaît me montrer un exemple alors? Autant que je sache, l'objet XMLHttpRequest sur lequel ajax fonctionne ne lancera pas une boîte de dialogue de sauvegarde même si les en-têtes le demandent. –

+0

vous avez raison; Je ne sais pas ce que je pensais – Pointy

-1

C'est quelque chose que le serveur doit faire. Il n'y a rien que vous puissiez faire du côté du client pour forcer un serveur qui refuse de définir les en-têtes de réponse.

+0

Le serveur définit les en-têtes de réponse mais les données sont renvoyées en tant que paramètre du rappel de «succès». Je veux savoir comment faire apparaître la boîte de dialogue "Enregistrer" dans le navigateur à ce stade. –

+0

Si cela se produit, je ne pense pas que le serveur configure correctement les en-têtes. Utilisez quelque chose comme Firebug ou TamperData pour vérifier ce qu'il y a réellement dans la requête et la réponse HTTP. – Pointy