如何通过ajax

时间:2017-06-02 09:49:48

标签: php excel laravel maatwebsite-excel

我们的应用程序通过ajax将post参数发送到服务器,以生成数据,将其格式化为excel,然后触发下载创建的excel。

我们之前使用phpexcel执行此操作,将excel保存在tmp文件中,然后触发重定向到excel文件的路由。我们正在将我们的应用程序迁移到laravel但是我们仍然以相同的方式使用mmatwebsite laravel excel提供程序,在laravel公共目录中保存tmp文件,并重定向到该位置。我们想直接下载它而不保存在tmp中,但只有每个到达的东西都是网络窗口中的一些乱码输出。

如何做到这一点,这是否可能,我们注定要使用tmp文件下载吗?当前简单的excel函数:`public function ExportCible(Request $ request){

  $cible = Cible::filter($request->all())->get();
  $columns = explode(",", $request->columns);
  $titles = explode(",", $request->titles);


  ob_end_clean();
  ob_start();
  $filename = "ciblage_d".date("Ymd",time())."_h".date("His",time());

  Excel::create($filename, function($excel) use($cible,$columns, $titles){

    $excel->sheet('Excel sheet', function($sheet)use($cible,$columns, $titles) {
      $sheet->setOrientation('landscape');
      $sheet->loadView('excelTemplates.cible')->with('cible', $cible)->with('columns', $columns)->with('titles', $titles);
    });

  })->store('xlsx', public_path('exports'));

  return($filename.".xlsx");

}`

在ajax侧调用窗口位置触发下载。

exportData:function(url,data){
return $.ajax(url,{
    data: data,
    method: "POST",
    success: function(fileLink){
        window.location = Config.exportRoute + fileLink
    },
});

},

我在这里缺少什么。尝试了其他laravel excel方法,例如 - > export()和 - > download()。之前在phpexcel中尝试过类似的方法。从来没有运气

1 个答案:

答案 0 :(得分:0)

如果您坚持使用ajax,请尝试在API中创建后返回excel文件obj,

并尝试ajax method: "GET"

另一种方法是在操作完成后为它设置一个临时路由和destory,所以你可以设置缓存或者其他来减少服务器的压力。