я не могу скачать файл force download не работает как исправить и скачать файл

Я не могу скачать файл.Я пытаюсь скачать файл с сервера через Ajax. I got success response in Ajax data and also file in response but file was not download what i do and how to fix this issue. Файл читает успешно, а также разорвать путь получить правильный. Пожалуйста, помогите мне.

Это Java-скрипт, когда я вызываю функцию и получаю ответный бросок ajax

<script type="text/javascript">
    function push_file(files)
    { 
    $.ajax
            ({
                type: "post",
                url: "<?php echo base_url(); ?>Appointment/download_files/",
                data: "files=" + files,
               success: function(data)
                {
                   alert('ok' + data);
                }
            });
    }
    </script>

PHP код и здесь я хочу скачать файл здесь и

foreach($results as $row){
    $r_id = $row->id;
    <td><h5><a onclick="push_file(<?php echo $r_id;?>)"> Download </a></hs><t>
    }

Контроллер
Ajax и PHP выполняют отлично и читать файл, но его не скачать

public function download_files() {
       //$this->load->view ( 'ajax/download' );
       if($_POST)
    {

    $base = base_url();
    $id = $_POST['files'];
    $query = $this->db->query("select userfile from patient_report_file where        id='".$id."'");
    $result = $query ->row();
    $name = $result->userfile;
    echo $path = $base."Admin/uploads/patient_report/".$name; 
    force_download($path, NULL);
    }

     }

Как скачать файл.

2 ответа

  1. Вы пытаетесь загрузить файл через ajax, что невозможно (по крайней мере, так, как вы это сделали)

    Теперь у вас есть два варианта

    Вариант №1-оставьте JS позади (зачем вам вообще нужен JS здесь-an
    оповещение после загрузки бесполезно imho)

    ваш взгляд должен выглядеть как

    foreach($results as $row)
    {
        echo '<td><h5><a href="'.base_url().'/Appointment/download_files/'.$row->id.'/"> Download </a></h5></td>';
    }
    

    и ваш контроллер

    public function download_files($id) 
    {
        //$this->load->view ( 'ajax/download' );
        $base = base_url();
        $id = $_POST['files'];
        $query = $this->db->query("select userfile from patient_report_file where        id='".$id."'");
        $result = $query ->row();
        $path = $base."Admin/uploads/patient_report/".$result->userfile; 
        force_download($path, NULL);
    }
    

    Вариант №2 — это немного сложнее, потому что он нуждается в некоторой адаптации, я не собираюсь писать этот код для вас, но вместо этого я даю вам некоторые ссылки для изучения

    Скачать файл jQuery.Аякс

    https://github.com/eligrey/FileSaver.js/

    загрузка файла с помощью ajax-запроса


    В целом, я не оцениваю ваш код, но вы сделали довольно плохую работу, чтобы правильно использовать CI 😉

  2. Если вы хотите использовать метод POST, что это мое решение:

    crsf включить:

    <script>
    function push_file(files)
        { 
        $('<form action="<?php echo site_url('admin/others/test');?>" method="post"><input type="hidden" name="files" value="'+files+'"><input type="hidden" name="csrf_token_name" value="<?php echo $this->input->cookie('csrf_cookie_name');?>"></form>').submit();
        }
        </script>
    

    crsf отключить:

    <script>
    function push_file(files)
        { 
        $('<form action="<?php echo site_url('admin/others/test');?>" method="post"><input type="hidden" name="files" value="'+files+'"></form>').submit();
        }
        </script>
    

    необходимо изменить контроллер пути.