对Laravel的POST请求然后将字符串下载为文件

时间:2014-08-29 20:19:15

标签: php jquery ajax laravel

我有一个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?

1 个答案:

答案 0 :(得分:1)

你的问题并不是100%清楚你所追求的 - 但这听起来像是一个Javascript问题,而不是Laravel问题。

当你告诉javascript发出一个AJAX请求时,你告诉浏览器

  

嘿,请在后台下载此网址,并在完成后通知我。

AJAX响应将从不触发浏览器页面刷新或文件下载。您需要将整个浏览器(通过document.locationwindow.open或类似的东西)完全重定向到另一个页面,而不是AJAX请求。