Выполнить некоторый код после загрузки ссылки

вот моя проблема

Я генерирую файл Excel в функции PHP (с 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);
});
});

Есть ли способ узнать, когда ссылка полностью загружена?
На самом деле, я понятия не имею.

0

Решение

Для вашего PHP-файла, который создает ваш файл Excel, вы захотите создать 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, а когда файл возвращается, сразу же выведите файл в тег и добавьте его куда угодно. Вы могли бы также window.location = data но это не добавляет имя файла. Я также попытался вызвать клик на теге, но это тоже не сработало.

$(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);
});

});
});
1

Другие решения

Если вы загрузите свою страницу создания Excel с помощью функции jQuery.ajax () или jQuery.load (), вы можете использовать соответственно функцию «success» или функцию обратного вызова, чтобы узнать, что процесс завершен, и перейти к следующему шагу. Вот как это сделать с помощью функции load (), если ваш модал имеет идентификатор myModal:

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

По вопросам рекламы [email protected]