Laravel phpspreadsheet, передавая данные с помощью ajax - PullRequest
0 голосов
/ 04 октября 2019

Я планирую использовать phpspreadsheet для извлечения наших расходов непосредственно из базы данных. Я все еще в учебной части, но я думал о том, что мне нужно передать данные из внешнего интерфейса (опция выбора) в бэкэнд, чтобы определить, из какой ветви и типа расходов я буду получать из базы данных. Если непосредственно из href = "/ sampleRoute" из тега привязки, он будет загружен, но если я попытаюсь пройти через ajax, он не будет.

пример кода моего маршрута, ajax и контроллера. код внутри контроллера взят из учебника, но ajax - это просто я пытаюсь что-то еще.

МАРШРУТ

Route::get('/excel_tf_breakdown', 'excelController@excel_tf_breakdown');

AJAX

$(document).on('click', '#btnExport', function(){
    test = 'test';

    $.ajax({
        url: '/excel_tf_breakdown',
        data: {
            test:test
        },
        method: 'get',
        dataType: 'json',
        success:function(data){
        }
    });
});

CONTROLLER

public function excel_tf_breakdown(Request $request){
    info($request->test);

    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', '#');
    $sheet->setCellValue('A2', 'First');
    $sheet->setCellValue('A3', 'First');
    $sheet->setCellValue('A4', 'First');

    $filename = 'sample.xlsx';

    //redirect output to client
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="'.$filename.'"');
    header('Cache-Control: max-age=0');

    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
    $writer->save('php://output');
    exit;
}

Запрос-> тест работает, но не загружает файл Excel. Я хотел бы знать, как я могу экспортировать в Excel с помощью AJAX.

1 Ответ

0 голосов
/ 04 октября 2019

Сделай одну вещь,

$(document).on('click', '#btnExport', function(){
    test = 'test';

    $.ajax({
        url: '/excel_tf_breakdown',
        data: {
            test:test
        },
        method: 'get',
        dataType: 'json',
        success:function(data){
            window.open('http://YOUR_URL','_blank' ); // You need to do this only.
        }
    });
});
...