У меня есть кнопка загрузки на моей стороне клиента. После нажатия кнопки некоторые заголовки устанавливаются на сервере с помощью PHP для запуска загрузки.Как вернуть строку клиенту после установки заголовка
//code snippet:
$filename = basename($datei);
$size = filesize($datei);
$this->response->setHeader('Content-Type', "application/force-download", TRUE);
$this->response->setHeader('Content-Disposition', 'attachment; filename='.$filename , TRUE);
$this->response->setHeader('Content-Length', $size, TRUE);
return "TEST"; //<--code will never go this far, it is ignored
Загрузка работает. Но я никогда не получаю что-то возвращенное как ответ, но заголовок. Как я могу вернуть что-то, например. строка после запуска загрузки?
Кажется, что невозможно вернуть что-то клиенту после установки заголовка.
ФОН
В основном моя цель состояла в том, чтобы показать и скрыть значок загрузки, например, покажете, что пиннер находится внутри кнопки загрузки, пока файл все еще загружается, и спрячьте его снова после завершения загрузки. Чтобы узнать, закончилась ли загрузка, я подумал, что могу просто вернуть что-то с сервера клиенту, чтобы клиент знал об этом, например. «загрузка выполнена успешно».
Но я не уверен, что это будет работать в любом случае, может быть, ответ придет до того, как загрузка еще закончится.
Для тех, кто читает этот вопрос, и так же запутался, как и я, разными редакциями и плохими формулировками: - чтобы вернуть строку после настройки заголовков, вы можете. (используйте «echo», а не «return» в коде, и он работает). - для отправки как загружаемого файла, так и другой строки за один раз и JS-процесс, вы можете. (Пример слишком длинный для комментариев, есть также оговорки). - использовать заголовки загрузки, а также добавить другую строку для отдельной обработки в JS, вы не можете (как сказал выбранный ответ). Но есть находки (открытые в отдельном окне, являющиеся очевидными, как упоминалось в ответе). – Robbie
Я всегда получаю «Этот запрос не имеет доступных данных ответа». Я пробовал «echo» и «return», однако загрузка началась. – Black
Это сработает - эхо добавляется к загрузке, но на самом деле ввернет то, что вы пытаетесь сделать, но оно делает то, что вы просили. Для чего вы _really_ хотите сделать (например, взаимодействие JS при загрузке или прогрессах), посмотрите на API потоковой передачи для Javascript (я думаю, что он поддерживает IE10 +?), Чтобы вытащить файл как поток данных И дополнительную информацию (как вы это ваш звонок, или вы можете просто откупорить, как только начнется загрузка); а затем используйте saveA для сохранения файловой части данных. Вам по-прежнему потребуется резервное копирование для других браузеров и немного поиграть, чтобы заставить его работать. – Robbie