Я пытаюсь сгенерировать файл .json для загрузки с помощью force_download () CodeIgniter в вызове Ajax, но он не работает должным образом.
Вот мой вызов 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 () терпит неудачу, но я не понимаю, почему.
Любая помощь очень ценится, спасибо!
Это не проблема с CodeIgniter, это ограничение JavaScript. Вы не можете загружать файлы через AJAX, как указано в разделе Загрузка файла jQuery.Ajax .
вы не можете сделать это через Ajax, потому что JavaScript не может сохранять файлы непосредственно на компьютер пользователя (из соображений безопасности)
Просто протестировал его на реальном env.
Контроллер приветствия (по умолчанию)
<?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>