Excel文件未通过浏览器自动下载

Excel file is not downloading automatically via browser

提问人:bryan332 提问时间:10/22/2023 最后编辑:Olivierbryan332 更新时间:11/3/2023 访问量:54

问:

基本上,我在 Wordpress 中编码,创建了一个功能,该功能仅显示 Hello World 并在浏览器上自动下载,但似乎不起作用?

内部:函数.php

    wp_enqueue_script('llc-quote-profile-autocomplete', get_template_directory_uri() . '/llc-quote-profile-autocomplete.js', array('jquery', 'jquery-ui-autocomplete'), null, true);
    wp_localize_script('llc-quote-profile-autocomplete', 'llcQuoteAutocomplete', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce'   => wp_create_nonce('llc_quote_profile_autocomplete_nonce'),
    ));

require_once(ABSPATH . 'vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

function export_data_to_excel() {
    $spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();
    $activeWorksheet = $spreadsheet->getActiveSheet();

    $activeWorksheet->setCellValue('A1', 'Hello World !');

    $writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment; filename="hello_world.xlsx"');
    header('Cache-Control: max-age=0');

    $writer->save('php://output');

    exit;
}
add_action('wp_ajax_export_data_to_excel', 'export_data_to_excel');
add_action('wp_ajax_nopriv_export_data_to_excel', 'export_data_to_excel');

自定义 Javascript.js 内部


    $('#llc-quote-details').on('click', '#exportExcelAndPDF', function() {
        var customersPo = $('#edited-customers-po').val();

        $.ajax({
            url: llcQuoteAutocomplete.ajaxurl,
            type: 'POST',
            data: {
                action: 'export_data_to_excel',
                customers_po: customersPo,
                nonce: llcQuoteAutocomplete.nonce,
            },
            success: function(response) {

            },
            error: function(xhr, status, error) {
                console.error(error); // Log any AJAX errors for debugging
            }
        });
    });

我只首先通过 Hello World 进行测试,因为如果这可行,我现在可以导出任何数据。

井。

  1. 设置标头以允许它
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment; filename="hello_world.xlsx"');
    header('Cache-Control: max-age=0');
  1. 尝试了Google Chrome,MS Edge,Mozilla Firefox,但仍然无法下载。
javascript php wordpress 下载 phpspreadsheet

评论

0赞 Chris Haas 10/22/2023
你的成功或错误是被击中的?因为这是 AJAX,它是后台,我希望即使成功也会保存您的文件,并且浏览器不会自动向用户公开下载。response
0赞 Olivier 10/22/2023
不要使用 AJAX 下载文件。
0赞 bryan332 10/22/2023
对于克里斯:成功正在被击中,我曾经有一个警报只是为了显示它。但即使按 OK 到警报,它也不会下载文件,而是在多个浏览器上尝试。对于 Oliver:不使用 Ajax 进行文件下载?你的意思是只使用 javascript onclick 事件吗?我一会儿会尝试一下。
0赞 Olivier 10/22/2023
我的意思是:提交一个不可见的表格(或者,对于该方法,只需使用 )。GETlocation.href = 'some URL'
0赞 CBroe 10/23/2023
如果您使用 AJAX,则浏览器不会自动弹出任何内容的“另存为”对话框。你发出了一个后台请求,因此你已经承担了处理任何响应的责任 - 你现在需要在你的 JavaScript 代码中显式地做到这一点。有一些方法可以将您的响应转换为客户端的“下载”......但是在这里不使用 AJAX 会更容易、更直接。

答:

0赞 Collie-IT Anne K. Frey 11/3/2023 #1

这是 Chrome 引擎和 Firefox 引擎的一项安全功能。如果文件已准备好自动下载,则可以使用 jQuery 单击该链接。

$( document ).ready(function() {
    $('#SELECTOR FOR FILELINK').click();
});