Как предложить пользователю ответ Ajax POST для загрузки? - PullRequest
3 голосов
/ 09 апреля 2009

Я пытаюсь включить функцию экспорта vCard в существующую страницу, полную информации об учетной записи.

Уродливые методы включают 1, отправку формы на ту же страницу, обработку ее и повторную визуализацию всей страницы, или 2, GET, нацеленный на iframe на странице. Я бы очень хотел избежать того и другого, но мне, возможно, придется использовать №2 для достижения цели.

Прямо сейчас у меня есть:

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

Это работает в том смысле, что если я смотрю активность XHR в Firebug, я вижу, что запрос возвращается с правильным ответом, полным данных в формате vCard. Однако он не предлагает пользователю загрузить ответ в виде файла, даже если карточка отправлена ​​с:

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

Я что-то не так делаю, или это просто невозможно?

Ответы [ 4 ]

6 голосов
/ 09 апреля 2009

Я не совсем понимаю, в чем именно заключается проблема. Почему бы просто не сделать что-то вроде:

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

А затем вернуть соответствующие заголовки загрузки на vcard.php? Когда браузер получит их, он останется на той же странице и запросит загрузку. Вам придется изменить код для обработки переменных как $_GET вместо $_POST, но вы все равно должны использовать GET для этого.

РЕДАКТИРОВАТЬ , как указано в комментариях, было бы еще более целесообразно сделать это:

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

Как тогда, он будет доступен пользователям с отключенным JavaScript.

2 голосов
/ 09 апреля 2009

Да, вы не можете запустить загрузку с xhr. Единственный способ, который я нашел - это вариант №2, используйте iframe.

Возможно, плагин jquery (я предполагаю, что вы используете jquery) является излишним для этой цели, но этот может быть вам полезен.

0 голосов
/ 15 апреля 2009

Создайте свой контент во время публикации, затем перенаправьте на этот контент.

0 голосов
/ 09 апреля 2009

проверьте правильность имени файла ´ {$ this-> name_first} {$ this-> name_last} .vcf´) и ответ http в firebug! (вкладка сеть, нажмите на ответ).

содержание там и правильно?
длина контента правильная? как насчет http-статуса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...