Я пытаюсь создать систему «Экспорт в CSV» с помощью ajax, так что это мой вызов ajax
$(document).on('click', '#export-csv', function(){ $.ajax({ url: export_url, type: 'post', data:{ validations: validations }, dataType: 'json', cache: false, timeout: 1000000, success: function (data) { var resp = data.response; console.log(resp); }, error: function (error) { console.log(error); } }); });
и это мой php-код для преобразования массива в csv
public function exportCsvAction() { $request = $this->getRequest(); if ($request->isPost()) { $input = $request->getPost(); $response = $this->getResponse(); $file = fopen('php://output', 'w'); foreach ($input['validations'] as $line) { fputcsv($file, $line, chr(9), '"'); } fclose($file); header('Content-type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="validations-' . time() . '.csv"'); return $response->setContent(\Zend\Json\Json::encode(array('response' => true))); } return $this->getResponse()->setStatusCode(400); }
Все работает. Мой аякс возвращает успех, но теперь я застрял …
Как загрузить файл после успешного вызова ajax? Каким будет следующий шаг?
Я уже провел свое исследование, и я не нашел ничего полезного и / или полезного.
Заранее спасибо.
Верните url файла .csv в свой вызов ajax. Затем в вашей функции успеха поставьте:
location.href = url;
Точно так же, как и все типы файлов, которые не будут обрабатываться браузером, это заставит браузер загружать файл.
Попробуйте создать элемент с атрибутом href
установленным в data URI
данных файла, используя URL.createObjectURL
, Blob
; download
атрибут для установки имени файла для диалога «Сохранить файл»
success: function (data) { var resp = data.response; var a = $("<a />", { href: "data:text/csv," + URL.createObjectURL(new Blob([resp], { type:"text/csv" })), "download":"filename.csv" }); $("body").append(a); a[0].click(); }