Экспорт CSV с помощью Laravel через Ajax

У меня есть функция экспорта CSV, он работал нормально с Laravel. Но сейчас я хочу вызвать функцию экспорта через ajax и использовать метод post, но у меня нет ответа. Я могу отправить переменную из контроллера laravel в ответ, но не могу отправить файл загрузки.

Вот мой код:

route.php

    Route::get('/title/show', 'TitleController@show');
Route::post('/title/show', 'TitleController@exportFromDB');

show.blade.php

<script>
$(document).ready(function () {
$('#exportFromDB').click(function () {
$.ajax({
url: "",
type: "post",
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
data: {},
success: function (response) {
var a = document.createElement("a");
a.href = response.file;
a.download = response.name;
}
})
})
})

TitleController.php:

    $dataExport['Oversea'] = $dataOversea;
$this->titleRepository->export('csv', $properties, $dataExport);

TitleRepository.php

public function export($type, $properties, $data)
{
if (in_array($type, self::EXPORT_TYPE)) {
try {
return Excel::create($properties['_title'], function ($excel) use ($data, $properties) {

$excel->setTitle($properties['_title']);
$excel->setCreator($properties['_creator'])
->setCompany($properties['_company']);
$excel->setDescription($properties['_description']);

$excel->sheet('Sheet', function ($sheet) use ($data) {
foreach ($data as $item) {
$sheet->fromArray($item);
}
});
})->export($type);
} catch (Exception $error) {
throw $error;
}
}
}

Как я могу их исправить? Благодарю

3

Решение

Попробуй это —

  1. Не пишите код для экспорта в свой метод контроллера, вместо этого просто сохраните файл Excel в вашей общей папке.

  2. Ваш метод контроллера должен вернуть имя файла.

  3. На вашем успехе Ajax сделать это —

location.href = путь / к / файлу / property_title.xls

Так замени эту строчку

->export($type);

с

->store($type, 'public/reports/', true);
3

Другие решения

Я вижу твое значение AJAX NULL

Измените это на

url : "{{ action('TitleController@exportFromDB') }}"

После этого ответом являются данные, которые вы возвращаете в контроллер

success: function (response) {}
0

Я установил пакет maatwebsite / excel и смог сделать это без написания javascript. Все, что вам нужно сделать, это установить ссылку (или типичную публикацию формы, если вы предпочитаете) на действие, например, так:

public downloadItemsExcel() {
$items = Item::all();
Excel::create('items', function($excel) use($items) {
$excel->sheet('ExportFile', function($sheet) use($items) {
$sheet->fromArray($items);
});
})->export('xls');
}

Это работает как для CSV / Excel файлов. Нет перезагрузки страницы в браузере.

0

Сначала вы должны изменить метод POST на GET.

Для ajax вы можете сделать это так:

$(document).ready(function () {
$('#exportFromDB').click(function () {
$.get('/title/show, function(data){
window.location = '/title/show=' + data;
});
})
})
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector