Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 17.07.2018, 15:54
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от SkyRewir
Если убрать
event.preventDefault();

Выбрасывает ошибку о том, что переменная $file не определенна
Это я вам плохой совет дал: При этом происходит два запроса на сервер, один просто с формы без file - он и дает ошибку, второй через ajax.

Последний раз редактировалось Dilettante_Pro, 17.07.2018 в 16:03.
Ответить с цитированием
  #22 (permalink)  
Старый 17.07.2018, 16:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

SkyRewir,
если уж так хочется (надо полагать, что пользователь знает, что его ждет, то есть скачивание файла), то после завершения POST запроса открыть либо новое окно, либо iframe, который запросит файл на скачивание. Если же в рамках ajax средствами JS сохранять на клиенте, то нужно учитывать, что файл, это BLOB. Если при этом вести диалог, а он необходим, чего у вас не наблюдается, то его тип данных иной.

<?
if($_POST) {
    exit('Y');
}
if($_GET['f']) {
    header("Content-Length: ".filesize('filename.ext'));
    header("Content-Disposition: attachment; filename=filename.ext"); 
    header("Content-type: type_file");
    fpassthru(fopen('filename.ext', 'rb'));
    exit;
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script> 
$(function() {
    $('button').click(function(){
        $.ajax({
            url: location,
            type: 'POST',
            data: {dst: 1},
            success: function(data){
                if(data){
                    $('<iframe style="display:none" src="?f=1"/>').appendTo('body')
                }
            }
        });
    });
});
</script>
</head>
<body>
<button>GO</button>
</body>
</html>


Это пример работы с iframe.
Ответить с цитированием
  #23 (permalink)  
Старый 17.07.2018, 17:02
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Получился вот такой рабочий макет:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<form action="email.php" method="POST" id="form1">
    <input type="text" name="file" value='true' hidden>
    <input type="text" name="name" placeholder="Ваше имя">
    <input type="phone" name="phone" placeholder="Ваш телефон">
    <input type="email" name="email" placeholder="Ваша почта">
    <button class="buttonIntroduction">Получить консультацию</button>
</form>
<form action="email.php" method="POST" id="form2">
    <input type="text" name="name" placeholder="Ваше имя">
    <input type="phone" name="phone" placeholder="Ваш телефон">
    <input type="email" name="email" placeholder="Ваша почта">
    <button class="buttonIntroduction">Получить консультацию</button>
</form>
<div id="buffer"></div>
<script>
 $("form").submit(function(event){
    var a = new FormData(this);

     if (!a.get('file')) event.preventDefault();
		$.ajax({
			url: $(this).attr('action'),
			type: $(this).attr('method'),
			data: a,
			contentType: false,
                        processData: false,
			cache: false,
			success: function(resp){
			   if(resp == 'noFile') $('#buffer').html("Всем спасибо");
			   else $('#buffer').html("Смотрите файл");
			}
		});
	}); 
</script>



<?php

$file = 'CatlView772_8417.pdf';
if($_POST['file']) { 
   if (file_exists($file)  ) {
      header('Content-Description: File Transfer');
      header('Content-Disposition: attachment; filename='.basename($file));
      header('Expires: 0');
      header('Cache-Control: must-revalidate');
      header('Pragma: public');
      header('Content-Length: ' . filesize($file));
      readfile($file);
      exit;
   }
}
echo('noFile');
?>


При отправке первой формы происходит загрузка файла с сервера на клиент, при отправке второй - нет.
Перезагрузки страницы нет в обоих случаях.

Последний раз редактировалось Dilettante_Pro, 17.07.2018 в 17:25.
Ответить с цитированием
  #24 (permalink)  
Старый 18.07.2018, 11:27
Аспирант
Отправить личное сообщение для SkyRewir Посмотреть профиль Найти все сообщения от SkyRewir
 
Регистрация: 07.06.2017
Сообщений: 47

Dilettante_Pro,
Это то что нужно, спасибо Вам большое!
Небольшая работа напильником и шестерёнки закрутились!
Всем спасибо за помощь! Вопрос решен
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка файла в массив строк с помощью AJAX malcomoffice AJAX и COMET 2 08.06.2010 18:02
Проверка наличия логина в БД при регистрации, с помощью ajax storng Общие вопросы Javascript 4 09.04.2010 20:24
Ajax c помощью prototype - что не так? Alive Substance Библиотеки/Тулкиты/Фреймворки 1 01.03.2010 16:51
Как в ajax запросе передать файл методом POST mcpro jQuery 1 16.12.2009 11:41
Заполнение таблицы с помощью AJAX x][x AJAX и COMET 11 08.05.2009 19:58