我有一个使用jQuery和PusherJS的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)
}
},
});
});
谢谢!