0

我有一个使用jQueryPusherJS的Laravel项目。当我按下一个按钮时,我会进行 ajax 调用并创建一个触发ExportHasFinished事件的 CSV 文件。该事件使用 Pusher 将结果广播到 JS。在前端,我看到一张卡片在文件准备好下载时通知我。所有这些都适用于我的导出页面。我想要实现的是让下载像 Google Drive 一样在后台运行,并且在发生这种情况时能够访问其他页面。

下载卡片的 HTML 在布局文件中,而 JS 包含在标题中,因此可以在所有其他页面上访问。在我的导出页面中,我取消隐藏下载卡,但是当我转到另一个页面时,该卡被隐藏并且导出不再运行。有什么办法可以做到这一点?

这是推送器的代码:

var pusher = new Pusher(pusherKey, { cluster: 'eu' });
var channel = pusher.subscribe('export.' + loggedInUser);

channel.bind('App\\Events\\ExportHasFinished', function(data) {
    if(data.fileURL) {
        // change the text of the download card
        downloadCard.find('.card-header').html('Ready for download');
        downloadCard.find('.card-subtitle').html('Your download will start soon.');

        // remove download card
        setTimeout(function( ) { downloadCard.fadeOut('slow'); }, 2000);

        // download file
        window.open(data.fileURL, '_self');
    }
    else {
        downloadCard.find('.card-subtitle').html('There was an error.');
    }
});

这是 Ajax 调用的代码:

$('.export-all').on('click', function(e) {
    e.preventDefault();

    $.ajax({
        async: true,
        method: "POST",
        url: exportAllAjaxUrl,
        data: { _token: CSRF_TOKEN, company_id: companyId, dataType: dataType },
        success: function(data) {
            if(data) {

            }
        },
        error: function(xhr, status, error) {
            if(xhr.responseJSON) {
                alert(xhr.responseJSON.errors)
            }
        },
    });
});

谢谢!

4

0 回答 0