【问题标题】:Execute some code after link is loaded加载链接后执行一些代码
【发布时间】:2016-05-29 12:42:18
【问题描述】:

这是我的问题。

我在 PHP 函数中生成 excel 文件(使用 Zend Framework 2)。有时,生成过程可能很长,太长(25 秒+),所以我决定创建一个基于模式的结构来显示加载器,这样用户就不会感到困惑。

我正在尝试使用 Jquery 来了解生成和下载 excel 文件的时间,以便我可以隐藏加载程序。只需单击一个链接即可生成该文件:

<a href="linkToGenerateMyExcelFile">Download excel file</a>

以下代码生成并下载 excel 文件,但不让我知道何时完成:

$(function() {
    $(document).on('click', ".btn-export", function(event){
        event.preventDefault();
        $("#myModal-export .loader").removeClass("hide");
        var url = $('.btn-export').attr("href");
        $(location).attr("href", url);
    });
});

有什么方法可以知道链接何时完全加载? 其实我也不知道。

【问题讨论】:

    标签: php jquery excel hyperlink loaded


    【解决方案1】:

    对于创建 excel 文件的 PHP 文件,您需要对文件进行 base64 处理,然后返回已完成文件的文件路径,如下所示...

    <?php
    
    $writer = new \PHPExcel_Writer_Excel5($workbook);
    
    
    ob_start();
    
        $writer->save('php://output');
    
    $xls = ob_get_contents();
    ob_end_clean();
    
    echo 'data:text/xls;base64,' . base64_encode($xls);
    
    ?>
    

    对于您的 JS,您要进行 AJAX get 调用,并在文件返回时直接输出 a 标签中的文件并将其附加到任何地方。您也可以window.location = data,但它不会添加文件名。我还尝试触发对 a 标签的点击,但也没有触发。

    $(function() {
        $(document).on('click', ".btn-export", function(event){
            event.preventDefault();
    
            $("#myModal-export .loader").removeClass("hide");
            var url = $(this).attr("href");
    
            $.get(url, function( data ) {
                $("#myModal-export .loader").addClass("hide");
                $a = $("<a>", {href: data, download: 'file_name.xls'});
                $a.text('Download');
                $('body').append($a);
            });
    
        });
    });
    

    【讨论】:

    • 感谢您的回答。它几乎完成了,只有一件事保持错误。实际上,加载程序在进程结束时是隐藏的,但是 window.location 行将我重定向到没有任何下载对话框的空白页面...
    • @A.Breton 那是什么?
    • @A.Breton 那么您的 PHP 文件有问题,您需要发布该代码并进行一些调试
    • 这是我的 PHP 函数的输出: $writer = new \PHPExcel_Writer_Excel5($workbook); header('内容类型:应用程序/vnd.ms-excel'); header('Content-Disposition:inline;filename=Fichier.xls'); $writer->save('php://output');
    • @A.Breton ...不,这是错误的...记得我说过save the file to your server and then return the file path of the completed file
    【解决方案2】:

    如果您使用 jQuery.ajax() 或 jQuery.load() 函数加载您的 Excel 创建页面,您可以分别使用“成功”或回调函数来知道该过程已完成并进入下一步。如果您的模态框的 ID 为 myModal,以下是使用 load() 函数的方法:

    $('#myModal').load('path-to-excel-generator.php',function() {
        // code to be executed after completion
    });
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多