【问题标题】:Laravel response make csv via ajaxLaravel 响应通过 ajax 生成 csv
【发布时间】:2016-07-06 10:13:24
【问题描述】:

您好,我正在使用 Laravel 响应类生成 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

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

【问题讨论】:

    标签: php jquery ajax laravel csv


    【解决方案1】:

    创建另一条路线

    1.在该路由的控制器函数中,您返回当前 ajaxing 到它的路由的 url

    2.更改ajax函数获取这条新路由

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2016-04-18
      • 2019-11-28
      • 2014-07-06
      相关资源
      最近更新 更多