Определяет, был ли файл отправлен в браузер или нет? .. своего рода

StackOverflow https://stackoverflow.com/questions/1400044

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть кнопка, которая устанавливает window.расположение в php-файле, который генерирует канал, который затем загружается.Однако, поскольку размер файлов варьируется в зависимости от того, какие данные помещаются в ленту, иногда может потребоваться некоторое время от нажатия кнопки до появления диалогового окна файла.

То, что я хотел бы иметь возможность сделать, это нажать кнопку и отобразить loading.gif пока диалоговое окно / файл не будет завершено.

Любые идеи были бы классными!

Ваше здоровье

Это было полезно?

Решение

Просто заставьте скрипт генерации RSS показывать нужное вам изображение (выводите HTML-код изображения, затем очистите выходной буфер и запустите генерацию данных).В конце генерации данных выполните:

<?php
print '<script>window.location = "http://www.newlocation.com"</script>'

Вот и все.

Другие советы

Я не совсем уверен, зачем вам вообще нужно проверять размер файла?Если вы используете ajax для динамического выполнения get / post, и все, что вы делаете, это пытаетесь показать значок загрузки, пока это происходит, довольно просто создать индикатор асинхронной активности.Например, с помощью jquery:

$("#loading").ajaxStart(function(){
   $(this).show();
});

$("#loading").ajaxStop(function(){
   $(this).hide();
});

$("#feeds").load("feeds.php?id=89734258972347895");

Приведенный выше код устанавливает объект DOM с идентификатором "loading" для отображения и скрытия при инициировании и остановке любого асинхронного запроса..load(url) загружает содержимое URL-адреса в div #feeds .Если вы устанавливаете расположение содержимого:заголовок вложения с помощью php автоматически инициирует окно загрузки файла, даже если он был загружен асинхронно в div.Конечно, это также возможно без jquery, есть только набор совместимых с браузером javascript, и это не так просто, как просто подписаться на события ajaxStart и ajaxStop, чтобы показать и скрыть ваш загружаемый img.

Джош

перед настройкой окна.местоположение вы могли бы отобразить скрытый div с вашим gif

Это старая школа, но это можно сделать очень легко с помощью server push

<?php
  $separator = "end_of_section_marker";
  header('Content-type: multipart/x-mixed-replace;boundary=$separator');
  print "\n--$separator\n";
  print "Content-type: text/html\n\n";
  // Send placeholder message here
  print "--$separator\n";
  ob_flush();
  flush();
  // Start long processing here
  print "Content-type: text/html\n\n";
  // send data here
  print "--$separator--\n";
?>

Просто настройте типы контента для данных, которые вы отправляете.разделителем $ может быть любое значение, если оно не отображается в отправляемых данных.

Метод, который я использовал в прошлом, работает следующим образом...

  • Установите window.перейдите на страницу загрузки и передайте целевую страницу в строке запроса.На странице загрузки должен отображаться анимированный gif-файл или что-то еще, что вы предпочитаете, чтобы продемонстрировать, что обработка происходит.Страница загрузки должна НЕМЕДЛЕННО перенаправляться на страницу назначения, переданную в строке запроса (вместе с любыми другими применимыми параметрами строки запроса).

Редактировать:Страница загрузки должна перенаправлять на страницу назначения с использованием javascript (установите window.расположение по URL, указанному в строке запроса).Это важный момент, потому что при перенаправлении на стороне сервера страница загрузки отображаться не будет.

ПРАВКА 2:Если ваша страница загрузки представляет собой php-файл, вы можете проверить размер загружаемого файла и отобразить пользователю предполагаемое время загрузки (вместе с анимированным GIF-файлом "загрузка") или что-то еще.

  • Целевая страница должна отображаться с включенной буферизацией (вызовите ob_start() перед отображением какого-либо содержимого).При включенной буферизации ничего не отправляется в браузер до тех пор, пока не будет отрисована вся страница.Тем временем ваша страница загрузки с шага 1 будет продолжать отображаться.

Вам придется использовать AJAX для связи с сервером, чтобы определить точный размер загружаемого файла.Тогда вам есть с чем сравнить.Невозможно узнать размер ожидаемой полезной нагрузки только со стороны клиента.

Возможно ли для вас использовать iframe для загрузки ленты, а затем проверить состояние готовности iframe / документа, используя интервал?Таким образом, процесс был бы:

  • Загрузите окно, содержащее iframe шириной и высотой 100% и loading.gif поверх iframe.
  • Установите таймер проверки свойства iframe.contentWindow.document.readyState
  • После завершения readyState == отобразите диалоговое окно сохранения файла.

Одним из недостатков является то, что для большинства браузеров PHP-файл должен находиться в одном домене (в IE вы можете просто проверить свойство readyState iframe).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top