我有一个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?
答案 0 :(得分:1)
你的问题并不是100%清楚你所追求的 - 但这听起来像是一个Javascript问题,而不是Laravel问题。
当你告诉javascript发出一个AJAX请求时,你告诉浏览器
嘿,请在后台下载此网址,并在完成后通知我。
AJAX响应将从不触发浏览器页面刷新或文件下载。您需要将整个浏览器(通过document.location
,window.open
或类似的东西)完全重定向到另一个页面,而不是AJAX请求。