2016-02-17 6 views
0

вот моя проблема.Выполнить код после загрузки ссылки

Я генерирую файл 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); 
    }); 
}); 

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

ответ

0

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

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

Для вашего 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 получить вызов и, когда файл будет возвращен прямым выводу файл в теге добавить его туда, где когда-либо. вы также можете указать 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); 
     }); 

    }); 
}); 
+0

Благодарим за ответ. Это почти закончено, только одна вещь не в порядке. Фактически, загрузчик скрыт в конце процесса, но строка window.location перенаправляет меня на пустую страницу без какого-либо диалога с нисходящей связью ... – abreton

+0

@ A.Breton Что это? – cmorrissey

+0

Только что отредактировал, извините. – abreton