Показать сообщение отдельно
  #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.
Ответить с цитированием