2016-07-06 14 views
0

こんにちは私はLarvelsレスポンスクラスを使ってcsvを次のように生成しています。Laravel response ajax via csv

$output = 'id,username,email'. "\n"; 

foreach ($users as $user) { 
      $output .= implode(",", [ 
          $user->id, 
          $user->username, 
          $user->email, 
       ]) . "\n"; 
} 

$headers = [ 
      'Content-Type' => 'text/csv', 
      'Content-Disposition' => 'attachment; filename="users.csv"', 
     ]; 
    return \Response::make($output, 200, $headers); 

通常の方法でフォームを送信すると機能します。しかし、私は次のようにajax経由でこれを行う場合、私はこのダウンロードをajax経由で行いたいです。

$(document).on('submit', 'form#export', function (e) { 
    e.preventDefault(); 
    var myForm = $(this); 
    data = $(this).serialize(); 

    //var 
    $.ajax({ 
     url: myForm.attr('action'), 
     dataType: 'JSON', 
     data: data, 
     type: myForm.attr('method'), 
     success: function (json) { 
      console.log(json); 
     }, 
     error: function (jqXhr, json, errorThrown) { 
      alert('An unexpected error occured, please try again or contact.'); 
     } 

    }); 
}); 

これでファイルはダウンロードされませんが、代わりにajax経由での応答は次のようになります。私はあなたが現在それにajaxingルートのURLを返すそのルートのコントローラ機能1.In別のルート

を作成

答えて

0

をダウンロードするには、このファイルを強制することができますどのように

id,username,email,1,user1,[email protected],2,user2,[email protected] 

任意のアイデアをAJAX 3.whenこの新しいルート

を取得する

2.Change AJAX機能がトリガされ、それは、CSVのURLを取りますajax success関数では、window.locationを使用してcsvダウンロードをトリガーするか、ダウンロード属性を使用して非表示のリンクをトリガーするをクリックしてください。