Вернуть вложение с помощью вызова $ .ajax - PullRequest
8 голосов
/ 29 декабря 2010

У меня есть iframe на моей странице, и внутри этого iframe я выполняю код:

$.ajax({
    url: '/SamplePage/ExportToExcel',
    async: false,
    data: par,
    type: 'POST'
});

Ответ возвращается нормально, однако я не получаю диалоговое окно «SAVE ATTACHMENT», ничего не происходит ... Чтобы прояснить ситуацию, заголовки в порядке (расположение содержимого, тип mime и т. Д.), Как при выполнении этого экспорта с использованием Представление простой формы это работает. Кажется, это как-то связано с вызовом ajax. Будет ли это работать как-то?

Спасибо

Ответы [ 2 ]

9 голосов
/ 14 ноября 2012

Чтобы расширить ответ Дарина, вот как я это сделал:

У меня есть скрытая форма со скрытым элементом ввода, который будет использоваться для динамического хранения значений, которые я хочу преобразовать / экспортировать:

<form id="svg_export_form" method="POST" style="display:none;visibility:hidden">
    <input type="hidden" name="svg" />
</form>

Затем у меня есть этот код jQuery для динамического заполнения элементов параметрами записи, а затем отправки формы.

$('#svg_export_form > input[name=svg]').val(svg_code);
$('#svg_export_form').attr('action','api/reports/convert/svg/to/png');
$('#svg_export_form').submit();

И поскольку в возвращаемом ответе (для вызова API) задан заголовок Content Disposition, действие отправки формы не будет перемещать пользователя с текущей страницы (а просто возвращает вложение), как обычныйФорма отправки, и, таким образом, все еще сохраняет иллюзию типичного представления Ajax: -)

8 голосов
/ 29 декабря 2010

Вы не получите диалоговое окно Сохранить как при использовании AJAX.Если вы хотите получить это диалоговое окно, просто предоставьте обычную ссылку на загружаемый файл:

<a href="/SamplePage/ExportToExcel">download</a>

или если вам нужен запрос POST:

<form action="/SamplePage/ExportToExcel" method="post">
    <input type="submit" value="download" />
</form>

Когда вы используете AJAX для загрузкиfile содержимое этого файла извлекается при успешном обратном вызове, но вы мало что можете с ним сделать: вы не можете сохранить его на клиентском компьютере и не можете получить диалоговое окно Save As.

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