Я пытаюсь включить функцию экспорта 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");
Я что-то делаю неправильно, или это просто невозможно?
Я в замешательстве, что именно проблема. Почему бы просто не сделать что-то вроде:
<input type="image" src="/intra/imgs/icons/vcard.png" onclick="window.location='/intra/vcard.php?id=992772&type=sponsor';">
А затем верните соответствующие заголовки загрузок на vcard.php
? Когда браузер получит их, он останется на одной странице и предложит загрузить. Вам придется изменить свой код, чтобы обрабатывать переменные как $_GET
вместо $_POST
но вы должны использовать GET для этого в любом случае.
EDIT, как указано в комментариях, было бы еще более уместно сделать это:
<a href="/intra/vcard.php?id=992772&type=sponsor"><img src="/intra/imgs/icons/vcard.png"></a>
Как и тогда, он будет доступен пользователям с отключенным javascript.
Да, вы не можете запустить загрузку с xhr. Единственный способ, который я нашел, это вариант №2, используйте iframe.
Возможно, плагин jquery (я предполагаю, что вы используете jquery) является излишним для этой цели, но это может пригодиться вам.
проверьте, является ли имя файла '{$ this-> name_first} {$ this-> name_last} .vcf') действительным и HTTP-ответ в firebug! (вкладка сети, нажмите на ответ).
это содержание там и правильно?
правильная длина контента? как насчет http-статуса?
Создавайте контент во время публикации, а затем перенаправляйте его на этот контент.