【问题标题】:CodeIgniter's force_download() problemsCodeIgniter force_download() 问题
【发布时间】:2015-07-27 12:22:51
【问题描述】:

我正在尝试在 Ajax 调用中使用 CodeIgniter 的 force_download() 生成要下载的 .json 文件,但它没有按预期工作。

这是我的 Ajax 调用:

$.ajax({
    url: /myfunction, 
    type: 'POST', 
    data: {value_sent: my_json_array}
});

还有我的 PHP 函数:

public myfunction()
{
    $dl_array = $this->input->post("value_sent");
    $this->load->helper('download');
    force_download("file.json", $dl_array);
}

数据已发送(我仔细检查过),但从未显示下载提示。我假设 force_download() 失败,但我不明白为什么。

非常感谢任何帮助,谢谢!

【问题讨论】:

  • myfunction 被执行了吗?
  • 是的,如果我回显某些内容,并在回调中使用此值,它会起作用。
  • 什么是 /myfunction(也许应该被引用)。您能否提供您的 my_json_array 的外观
  • ajax 调用发生在浏览器的后台。它不适用于下载,并且由于您在 ajax 调用中没有 success 处理程序,因此调用返回的任何数据都会被丢弃。
  • 您需要使用成功功能以某种方式返回数据我相信您将不得不强制弹出以触发下载。

标签: php ajax json codeigniter


【解决方案1】:

这不是 CodeIgniter 的问题,而是 JavaScript 的限制。您无法通过 AJAX 下载文件,如 Download a file by jQuery.Ajax 中所述。

你不能通过 Ajax 来做,因为 JavaScript 不能保存文件 直接发送到用户的计算机(出于安全考虑)

【讨论】:

  • 我知道,但我使用 PHP 来生成下载,而​​不是 javascript。仅使用 Ajax 是因为我从 localStorage 获取数据。
  • 您可能正在使用 PHP 来生成下载,但对 PHP 的调用来自 JavaScript 并通过 AJAX 调用,该调用正在等待来自服务器的响应。由于文件下载不是 ti 期望的服务器响应,因此它无法执行任何操作。您需要做的是将数据作为表单的一部分发送到 CodeIgniter 页面,并让它作为常规服务器请求处理下载。
  • 你的意思是我应该改用$("form#mydownload").submit();之类的东西?
  • 是的。一旦您在表单中设置了下载所需的变量(即使它们需要隐藏),然后提交表单。当用户收到来自服务器的下载响应时,一旦文件下载完成,他们不应该被重定向。
  • 非常感谢,我会试试的!
【解决方案2】:

刚刚在真实环境中测试过。

欢迎控制器(默认)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function index()
    {
        $this->load->view('welcome_message');
    }

    public function myfunction()
    {
        $dl_array = $this->input->post("value_sent");
        $this->load->helper('download');
        force_download("file.json", $dl_array);
    }
}

/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */

欢迎信息查看

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Welcome to CodeIgniter</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>

<script>
    $(document).ready(function () {
        $('#form').submit();
    });
</script>
<h1>Welcome</h1>

<form id="form" action="/myfunction" method="post">
    <input type="text" name="value_sent" value="text to download"/>
</form>

</body>
</html>

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2013-07-17
    • 2012-10-27
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多