您好我正在使用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
任何想法如何强制下载此文件
答案 0 :(得分:0)
创建另一条路线
1.在该路线的控制器功能中,您返回当前为其路线的路线的网址
2.更改ajax函数以获取此新路径
3.当ajax被触发时,它会获取csv的url
在ajax成功函数中,您可以使用以太window.location
触发csv下载,或者单击触发带有下载属性的隐藏链接