我试图在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()失败了,但我不明白为什么。
非常感谢任何帮助,谢谢!
答案 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>