экспортировать данные таблицы в php используя ajax - PullRequest
0 голосов
/ 05 июня 2019

Я пишу код PHP (в drupal) для экспорта данных в файл Excel, используя ajax. Я не получаю никакой ошибки, но файл не загружается, когда я нажимаю кнопку для экспорта в Excel.Но загрузка файла происходит, когда я напрямую нагреваю URL (из браузера)

Это код ajax

jQuery('.export-csv', context).once('export').click(function() {
console.log('test');

var role = 'teacher';

 /*get basepath*/
 var basepath = drupalSettings.path.baseUrl;
jQuery.ajax({
 type : 'GET',
url  : basepath + 'report-export/'+role,
    success : function (data) {
console.log('success');
},
error: function () {
console.log('error');
}
})
})

и функция php в контроллере для загрузки файла Excel

 public function exportToExcel($role)
    {
        $filename = "report.xls";       
        header("Content-Type: application/vnd.ms-excel");
        header("Content-Disposition: attachment; filename=\"$filename\"");
        $records = array(
        '0' => array('Name'=> 'user1', 'Status' =>'complete', 'Priority'=>'Low', 'Salary'=>'001'),
        '1' => array('Name'=> 'user2', 'Status' =>'inprogress', 'Priority'=>'Low', 'Salary'=>'111'),
        '2' => array('Name'=> 'user3', 'Status' =>'hold', 'Priority'=>'Low', 'Salary'=>'333'),
        '3' => array('Name'=> 'user4', 'Status' =>'pending', 'Priority'=>'Low', 'Salary'=>'444'),
        '4' => array('Name'=> 'user5', 'Status' =>'pending', 'Priority'=>'Low', 'Salary'=>'777'),
        '5' => array('Name'=> 'user6', 'Status' =>'pending', 'Priority'=>'Low', 'Salary'=>'777')
        );

$heading = false;
    if(!empty($records))
      foreach($records as $row) {
        if(!$heading) {
          // display field/column names as a first row
          echo implode("\t", array_keys($row)) . "\n";
          $heading = true;
        }
        echo implode("\t", array_values($row)) . "\n";
      }
        exit;
    }

хотя я не получаю ошибку, но файл не загружается.и в консоли AJAX также получить сообщение об успехе.и когда я направляю URL как site.com/report-export/, файл загружается

1 Ответ

1 голос
/ 05 июня 2019

Вам не хватает нескольких тегов заголовка, чтобы сделать эту работу. Это работает для меня, процедурный стиль. Быстро, без проблем.

form.php

 <a class="btn btn-default" href="download.php">Download Excelsheet</a>

download.php

<?php
$file = '../path-to/filename.csv';//csv
$file = '../path-to/filename.xls';//excel

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');//csv
    header("Content-Type: application/xls");//excel
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}
?>
...