2015-10-26 52 views
0

我使用Laravel 5.1。使用響應文件未在Laravel5上下載

甲jQuery的AJAX調用是由這樣的:

$('#export_selected').click(function(){ 
       var checked = $('.select_rows:checked'); 
       var ids  = []; 
       $.each(checked, function(index, value){ 
        ids.push(value.id); 
       }) 
       $.ajax({ 
        method : "POST", 
        url : "{{URL::to('/spot/exportTable')}}", 
        data : {ids:ids} 
       }); 
      }); 

然後PHP的方法被定義這種方式:

public function exportTable(Request $req) { 
      $spots = array_flatten($req->all()); 
      $res = Spot::whereIn('id', $spots)->get(); 

      Excel::create('Spots', function($excel) use($res) { 
       $excel->setTitle('Title goes here'); 
       $excel->setCreator('Creator Goes Here')->setCompany('Company Goes Here'); 
       $excel->sheet('Excel sheet', function($sheet) use($res) { 
        $sheet->setOrientation('landscape'); 
        $sheet->fromArray($res); 
       }); 
      })->store('csv', storage_path('/exports', true)); 

      $file = base_path() . '/storage/exports/Spots.csv'; 
      $headers = ['Content-Type: application/csv', 'Content Description: File Transfer', 'Cache-Control: must-revalidate, post-check=0, pre-check=0']; 
      return response()->download($file, 'Spots.csv' , $headers); 
    } 

鉻顯影劑控制檯打印結果爲原料線。

該文件已成功導出並在磁盤中創建。

文件的路徑是正確的。

但是下載從未開始。

呼應響應給出了:

HTTP/1.0 200 OK 
0:     Content-Type: application/csv 
Cache-Control:  public 
Content-Disposition: attachment; filename="Spots.csv" 
Date:    Mon, 26 Oct 2015 16:08:26 GMT 
Last-Modified:  Mon, 26 Oct 2015 16:08:26 GMT 
1:     Content-Description: File Transfer 
2:     Cache-Control: must-revalidate, post-check=0, pre-check=0 
+1

從'響應()刪除'$ headers' - >下載()'然後再測試 – manix

+0

@manix剛剛做了,沒有改變什麼。同樣的舊結果,並且沒有下載正在啓動。雖然我不認爲這是一個瀏覽器問題,但我已經嘗試過在Chrome,Firefox和IE上。 – Alucard

+1

哦!我知道了。你不能通過ajax下載。用戶必須通過發送請求來打開/下載,然後重新引導/重定向整個瀏覽器 – manix

回答

0

我把答案這裏有同樣的問題大家。

@manix想通了:我想通過Ajax,這需要以另一種方式來進行下載,沒有辦法的辦法,我寫我的代碼