我有一个ajax POST请求被发送到laravel控制器,这很好。我在控制器中做了一些工作,得到了一个大小从几百千字节到几百兆字节不等的字符串。
我想把这个字符串作为一个文件下载,我一直在尝试各种方法,但问题是,每当我使用return将字符串传递到不同的控制器或不同的页面时,它都会将输出返回到ajax成功。我试过消除成功,但仍然没有成功。
/*POST request*/
$.ajax({
type:"post",
url:"{{ URL::route('sshDownload') }}",
data: {
id:id
file:file,
status:"logfile"
},
success:function(data){
console.log(data);
console.log("SUCCESS");
}
});
在我的sshDownload
控制器中,我正在尝试这样做:
return Response::make($output, '200', array(
'Content-Type' => 'text/plain',
'Content-Disposition' => 'attachment; filename="file.log'
));
我甚至尝试过:
return Redirect::route('sshDownloadName')->with($output);
但最终,每当我使用return时,它都会将数据发送回前端ajax。
如何直接从PHP下载字符串,而不是将其发送到ajax?
从你的问题中还不能100%清楚你想要什么——但这听起来像是一个Javascript问题,而不是Laravel问题。
当你告诉javascript发出AJAX请求时,你就是在告诉浏览器
嘿,在后台下载这个URL,完成后告诉我。
AJAX响应永远不会触发浏览器页面刷新或文件下载。您需要将整个浏览器(通过document.location
、window.open
或类似的方式)完全重定向到另一个页面,而不是AJAX请求。