2009-04-09 9 views
3

J'essaye d'inclure une fonction d'exportation de vCard dans une page existante pleine d'information de compte. Les méthodes moche impliqueraient 1, soumettant un formulaire à la même page, le traitant et rendant le rendu de la page entière, ou 2, un GET ciblant un iframe sur la page. J'aimerais vraiment les éviter tous les deux, mais il se peut que je doive utiliser # 2 pour atteindre l'objectif.Comment offrir une réponse Ajax POST à ​​l'utilisateur en téléchargement?

En ce moment, j'ai:

<input type="image" src="/intra/imgs/icons/vcard.png" onclick="$.post('/intra/vcard.php', { id: '992772', type: 'sponsor'});"> 

Ce qui fonctionne dans le sens que si je regarde l'activité XHR dans Firebug Je vois la demande de revenir avec la réponse correcte, complète des données formatées vCard. Cependant, il ne demande pas à l'utilisateur de télécharger la réponse en tant que fichier, même si la carte est envoyée avec:

header('Content-Type: text/x-vcard'); 
header("Content-Disposition: attachment; filename={$this->name_first}{$this->name_last}.vcf"); 

que je fais quelque chose de mal, ou est-ce tout simplement pas possible?

+0

Vous souhaitez POSTER un téléchargement? Contradiction dangereuse dans les termes, je trouverais un moyen qui fait cela comme un GET. – annakata

+0

L'adhésion REST est loin d'être importante dans ce contexte. Merci d'avoir jeté un coup d'oeil. –

Répondre

6

Je suis confus quant à ce qu'est exactement le problème. Pourquoi ne pas faire quelque chose comme:

<input type="image" 
     src="/intra/imgs/icons/vcard.png" 
     onclick="window.location='/intra/vcard.php?id=992772&type=sponsor';"> 

Et puis retournez les en-têtes de téléchargement appropriés sur vcard.php? Lorsque le navigateur les obtient, il reste sur la même page et demande le téléchargement. Vous devrez changer votre code pour gérer les variables comme $_GET au lieu de $_POST mais vous devriez utiliser GET pour cela de toute façon.

<a href="/intra/vcard.php?id=992772&type=sponsor"><img src="/intra/imgs/icons/vcard.png"></a> 

Comme il serait accessible aux utilisateurs javascript qui est désactivé:

EDIT comme indiqué dans les commentaires, il ce serait encore plus approprié de le faire.

+0

Je pensais me souvenir d'un comportement comme celui-là, mais je n'arrivais pas à me rappeler comment je l'avais accompli (il y a 5 ans?). Merci! –

+0

et pourquoi ne pas utiliser au lieu de onclick? – Kornel

+1

C'est vrai. Je ne pensais même pas. –

2

Oui, vous ne pouvez pas déclencher de téléchargement depuis xhr. La seule façon que j'ai trouvé est l'option # 2, utilisez un iframe. Peut-être un plugin jquery (je suppose que vous utilisez jquery) est une exagération pour cela, mais this peut vous être utile.

0

Vérifiez si le nom de fichier '{$ this-> nom_premier} {$ this-> nom_dernier} .vcf') est valide et la réponse http dans firebug! (onglet réseau, cliquez sur la réponse).

Est-ce que le contenu est là et correct?
la longueur du contenu est-elle correcte? qu'en est-il du statut http?

0

Générez du contenu pendant la publication, puis redirigez-le vers ce contenu.