Ajax и загрузка CSV-файла

Я пытаюсь создать систему «Экспорт в 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(); }