Laravel响应通过ajax生成csv

时间:2016-07-06 10:13:25

标签: php jquery ajax laravel csv

您好我正在使用Laravels响应类来生成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的响应如下;

id,username,email,1,user1,user@email.com,2,user2,user2@email.com

任何想法如何强制下载此文件

1 个答案:

答案 0 :(得分:0)

创建另一条路线

1.在该路线的控制器功能中,您返回当前为其路线的路线的网址

2.更改ajax函数以获取此新路径

3.当ajax被触发时,它会获取csv的url 在ajax成功函数中,您可以使用以太window.location触发csv下载,或者单击触发带有下载属性的隐藏链接