【问题标题】:POST request to Laravel then download string as a file向 Laravel 发出 POST 请求,然后将字符串下载为文件
【发布时间】:2014-08-29 20:19:14
【问题描述】:

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

【问题讨论】:

  • 您的基本控制器类型是什么?

标签: php jquery ajax laravel


【解决方案1】:

您的问题并不是 100% 清楚您在追求什么——但这听起来像是 Javascript 问题,而不是 Laravel 问题。

当您告诉 javascript 发出 AJAX 请求时,您是在告诉浏览器

嘿,在后台下载这个 URL,完成后告诉我。

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

【讨论】:

  • 是的,我认为这不是 laravel 问题。我一直试图阻止 Ajax 的成功,但这不起作用。那么我必须提交表格或其他东西吗?
  • @Envious 忽略前面的评论,我错过了你需要 POST。是的,标准的 Javascript 技术是创建一个表单,然后发布它。 stackoverflow.com/questions/133925/…
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2018-04-11
  • 2016-03-28
  • 2022-10-21
  • 2019-05-16
  • 2014-11-11
相关资源
最近更新 更多