Можно ли опубликовать форму с большим количеством данных json и вернуть в виде файла .csv? - PullRequest
1 голос
/ 05 января 2012

Я хочу отправить большое количество кэшированных данных json из процесса импорта на контроллер MVC, который, в свою очередь, ответит текстовым файлом в формате CSV.

Проблема в том, что если я использую вызов AJAX, браузер не сможет обработать ответ и загрузить файл.

Если я использую обычную форму сообщения, то браузер будет обрабатывать возвращенный ответ файла. Тем не менее, AFAIK для отправки формы я не могу отправить данные Json, и я не хочу отправлять данные в строке запроса.

Похоже, я нахожусь между молотом и наковальней. Каковы мои лучшие варианты для достижения этой цели? Я хочу избежать записи файлов данных на сервер. По сути, я просто хочу отправить большое количество данных json и вернуться в браузере как запрос на загрузку.

Ответы [ 4 ]

1 голос
/ 05 января 2012

Только мои два цента. Если вы не хотите создавать файл, просто кешируйте данные в сеансе (или где угодно).

Итак:

  1. выполнить ajax-запись данных JSON
  2. в действии контроллера сохраните данные где-нибудь (например, Session) и создайте ключ для доступа к ним позже (guid) и верните их как объект json.
  3. в успешной функции ajax вызовите другое действие, передав ключ, полученный через обычное местоположение. Href = url + key

Это почти то же самое, что сохранить файл-сервер, за исключением того, что там нет файла.

0 голосов
/ 05 января 2012

На самом деле, я думаю, что лучшее решение заключается в следующем:

  1. Выполните AJAX POST, который выбирает CSV с сервера
  2. Используйте схему data: URI для просмотра CSV:

Либо напрямую

location.href = "data:text/csv;charset=utf-8,Value 1, Value 2, Value 3";

или подготовьте ссылку после завершения AJAX, примерно так:

<a href="data:text/csv;charset=utf-8,Value 1, Value 2, Value 3">Conversion finished. Save</a>

Это работает с ограничениями в IE8. Полная поддержка в IE9 и, конечно же, везде.

0 голосов
/ 05 января 2012

Я думаю, я бы назначил данные JSON для <input type='hidden'/>, а затем сделал бы $('form').submit().

0 голосов
/ 05 января 2012

яффа,

Вы можете черпать вдохновение из этого поста на SO:

Как разместить массив сложных объектов с помощью JSON, jQuery в ASP.NET MVC Controller?

на практике я размещаю объекты json через ajax как само собой разумеющееся в административных разделах моих приложений. что касается отправки обратно вывода в формате csv, это было бы трудно (если не невозможно) сделать с помощью частичного обновления (т. е. для вызова диалога сохранения). Конечно, вы могли бы вернуть CSV как частичное и заполнить div, но я думаю, что это не будет приемлемым решением.

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