【问题标题】:How to download file excel from jquery and route have post method - laravel excel如何从 jquery 下载文件 excel 和路由有 post 方法 - laravel excel
【发布时间】:2021-07-02 00:11:24
【问题描述】:

我想问一些关于使用 laravel 和一些插件 maatwebsite/excel 导出 excel 的问题,当我通过正常教程时一切正常,就像正常人一样工作没有错误,但我的问题是当我尝试进行自定义查询时我的ExampleExport.php (not real) 和我的 excel 文件的结果没有下载,我在控制台上看到我的结果,没有显示任何错误,但是当我单击网络选项卡并再次单击我的 url 时,错误消息显示如下:

The GET method is not supported for this route. Supported methods: POST.

无论如何,当您尝试访问post 方法时,我的错误是正常的,并且会显示该错误,但是是否有其他方法可以解决我的问题,以便我可以下载我的 excel 文件?我希望有什么方法可以解决我的问题,我想把我的代码放在下面,这样大家就可以知道我遇到了什么问题,谢谢你,祝你有美好的一天

JQUERY:

 // export excel button click
 $("#export_excel").on('click', function () {
      const yearInput = $("#year_input").val();
      // get api data only yearInput
      $.ajax({
           url: `report-payment/filter-data/year_result=${yearInput}`,
           method: "GET",
           data: {
                yearInput: yearInput
           },
           success: function (success) {
                *...* <= I skip this code
                 $.ajax({
                     url: `report-payment/export-excel`,
                     type: "POST",
                     dataType: "json",
                     data: {
                          nameOccupant: infoNameOccupant,
                          roomOccupant: infoRoomOccupant,
                          locationRoomOccupant: infoLocationRoomOccupant,
                          infoPayment: infoPayment
                     },
                     success: function (success) {
                          if (success) {
                               console.log('success');
                          }
                     }
                });
           }
       });
   });

控制器:

public function paymentExportExcel(Request $filter)
{
    $get_name_occupant = $filter->nameOccupant;
    $get_room_occupant = $filter->roomOccupant;
    $get_location_room_occupant = $filter->locationRoomOccupant;
    $get_info_payment = $filter->infoPayment;

    return Excel::download(new PaymentExport($get_name_occupant, $get_room_occupant, $get_location_room_occupant, $get_info_payment), 'report-payment.xlsx');
}

文件导出:

public function collection()
{
    for ($payment = 0; $payment < count($this->info_payment); $payment++) { 
        $raw_info_payment[] = [
            'info_payment' => $this->info_payment[$payment]
        ];
    }

    for ($payment = 0; $payment < count($raw_info_payment); $payment++) { 
        $get_arr_info_payment[] = \array_map(function ($value) {
            return $value == "-1" || $value == "-" ? "Belum Lunas" : $value;
        }, $raw_info_payment[$payment]['info_payment']);
    }

    // make a new object to insert a new data
    for ($data = 0; $data < count($this->name_occupant); $data++) { 
        $data_info_payment[] = [
            "name_occupant" => $this->name_occupant[$data],
            "room_occupant" => $this->room_occupant[$data],
            "location_room_occupant" => $this->location_room_occupant[$data],
            "info_payment" => $this->info_payment[$data]
        ];
    }

    return collect($data_info_payment);
}

【问题讨论】:

    标签: jquery excel ajax laravel


    【解决方案1】:

    当你想正常下载时,你不能用ajax调用。

    您可以使用 jquery 制作带有数据设置的隐藏表单,但您需要提交表单(例如当您在提交时将用户发送到另一个 URL),这将触发下载而无需用户离开页面。

    为什么建议提交表单?因为你的路由是一个 POST 请求,而你不能通过简单的重定向来做到这一点。

    如果您想使用 JS 处理下载,并手动设置 blob;按照这个答案 https://stackoverflow.com/a/9970672/4369919

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-12
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多