POST к серверу, получите PDF, поставьте пользователю w/jQuery

У меня есть ссылка, на которую пользователь нажимает для получения PDF. В jQuery я создаю POST ajax, звонят на сервер для получения PDF. PDF Прибывает ко мне с корректными заголовками содержания и т.д., которые обычно заставляли бы браузер открывать плагин Читателя или позволяли бы пользователю сохранять PDF.

Так как я получаю PDF w/вызов ajax, я не уверен, что сделать с данными, что я вхожу в обратный вызов OnSuccess. Как я могу дать данные, которые я получаю к браузеру и позволяю ему делать свою вещь по умолчанию с ответом PDF?

47
задан bryanvick 2 February 2010 в 18:26
поделиться

2 ответа

Проверьте это . Идея состоит в том, что вы получаете список атрибутов сборки с помощью Assembly.GetCustomAttributes () и ищете DebuggableAttribute , а затем находите, имеет ли такой атрибут набор свойств IsJITTrackingEnabled .

    public bool IsAssemblyDebugBuild(Assembly assembly)
    {
        return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Any(da => da.IsJITTrackingEnabled);
    }
-121--1175440-
import os
import fnmatch


def recursive_glob(treeroot, pattern):
    results = []
    for base, dirs, files in os.walk(treeroot):
        goodfiles = fnmatch.filter(files, pattern)
        results.extend(os.path.join(base, f) for f in goodfiles)
    return results

fnmatch дает вам точно такие же узоры, как glob , так что это действительно отличная замена glob.glob с очень близкой семантикой. Итеративная версия (например, генератор), IOW замена glob.iglob , является тривиальной адаптацией (просто дать промежуточные результаты по мере вашего продвижения, а не расширить расширить один результат перечислять, чтобы вернуться в конце).

-121--1781159-

jQuery вообще не нужен. Просто отправьте сообщение POST через форму, как правило, и на стороне сервера добавьте заголовок HTTP

Content-Disposition: attachment; filename="whatever.pdf"

Браузер будет выполнять свои действия по умолчанию.

Кроме того, если вы хотите быть более внимательными к сообщениям об ошибках, которые могут возникнуть во время создания PDF, вы можете сделать это. Отправьте параметры на сервер с помощью jQuery. На сервере создайте двоичное содержимое и кэшируйте его где-нибудь в течение нескольких минут, доступное через ключ, который вы положили в сеанс пользователя, и верните ответ Ajax «success» на вашу страницу (или если произошла ошибка, верните ответ «error»). Если страница получает отклик на успешный запрос, она может немедленно выполнить следующее действие:

window.location = "/get/my/pdf";

Сервер возвращает кэшированное содержимое PDF. Обязательно включите заголовок Content-Disposition, как описано выше.

31
ответ дан 26 November 2019 в 19:40
поделиться

Взгляните на - Плагин jQuery для запроса загрузки файлов в стиле Ajax

Весь плагин - это всего около 30 строк кода (включая комментарии).

Вызов очень похож на вызов jquery ajax.

$.download('/export.php','filename=myPDF&format=pdf&content=' + pdfData );

Конечно, вы должны установить заголовки content-type и Content-Disposition на стороне сервера, как и для любой такой загрузки.

В java я бы сделал что-то вроде этого

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename="exported.pdf");
50
ответ дан 26 November 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: