CodeIgniter的force_download()问题

时间:2015-05-15 14:18:51

标签: php ajax json codeigniter

我试图在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()失败了,但我不明白为什么。

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

2 个答案:

答案 0 :(得分:3)

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

  

你无法通过Ajax来实现,因为JavaScript无法保存文件   直接到用户的计算机(出于安全考虑)

答案 1 :(得分:1)

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

欢迎控制器(默认)

<?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>