У меня есть функция, которая записывает строку в базе данных каждый раз, когда кто-то загружает файл. У меня есть модальный режим, первый пользователь импортирует информацию о пользователе - имя, телефон, страну и т.д. после этого кнопка для загрузки активна, и он может ее загрузить ... как загрузить файл с помощью ajax? если рендеринг успешен и в консоли отображается содержимое файла, но не загружать его ... вот кнопка:
<div class = "col-md-10 col-xs-12 broshura" >
<a class = "popupBroshura-trigger">
<div class = "col-md-3 col-xs-3 pr0 pull-left pt15"><img src = "/images/download.png" /></div>
<div class = "col-md-9 col-xs-9 pl0 pull-left">
<div id = "six" class = "button customBtn pl0"><?=Yii::$app->OutData->getLabel(281);?></div>
</div>
</a>
</div>
вот функция ajax:
function downloadGallery() {
var product_id = $('input[name = "product_id"]').val();
var names = $('input[name = "StatisticBroshura[names]"]').val();
var email = $('input[name = "StatisticBroshura[email]"]').val();
var firma = $('input[name = "StatisticBroshura[firma]"]').val();
var phone = $('input[name = "StatisticBroshura[phone]"]').val();
var flag = $('input[name = "flag"]').val();
var country = $('input[name = "StatisticBroshura[country]"]').val();
var captcha_code = $('input[name = "StatisticBroshura[captcha_code]"]').val();
var container = $('#hidden-result');
$.ajax({
method: 'post',
url: '/admin/site/downloadbroshura',
data :{
product_id: product_id,
names: names,
firma: firma,
country: country,
phone: phone,
flag: flag,
email: email,
captcha_code: captcha_code
},
success: function ( data ) {
var data = JSON.parse( data );
if (data['result'] == true){
if (data [ 'flag' ] == 1) {
$('input[name = "StatisticBroshura[email]"]').val('');
$('input[name = "StatisticBroshura[names]"]').val('');
$('input[name = "StatisticBroshura[firma]"]').val('');
$('input[name = "StatisticBroshura[country]"]').val('');
$('input[name = "StatisticBroshura[phone]"]').val('');
$('input[name = "StatisticBroshura[captcha_code]"]').val('');
$('.message-broshura').html(data['textError']);
$('.message-broshura').css('border', '2px solid');
$('html, body').animate({
scrollTop: $(".popupRequest").offset().top
}, 2000);
window.location.href = data [ 'file' ];
}else{
$('.message-broshura').html(data['textError']);
$('.message-broshura').css('border', '2px solid');
$('.message-broshura').css('color', 'cornflowerblue!important');
$('html, body').animate({
scrollTop: $(".popupBroshura").offset().top
}, 2000);
}
}
return false;
}
});
}
и публичная функция в контроллере:
public function actionDownloadbroshura()
{
if (isset($_POST['product_id']) and !empty($_POST['product_id'])) {
$result['result'] = true;
$result['textError'] = '';
$result['flag'] = '';
$result['file'] = '';
$flag = $_POST['flag'];
$class = '';
$first_step = Yii::$app->getRequest()->getQueryParam('first_step');
$second_step = Yii::$app->getRequest()->getQueryParam('second_step');
$product_step = Yii::$app->getRequest()->getQueryParam('product');
$last = explode('-', $product_step);
$id = end($last);
$lastparent = explode('-', $second_step);
$idparent = end($lastparent);
$product = Product::findOne($id);
$modelBroshura = new StatisticBroshura();
$messageBroshura = "";
$sessionBroshura = new Session;
$sessionBroshura->open();
$model = new Request();
$message = '';
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if ($_SESSION['captcha']['code'] != $_POST['captcha_code']) {
$result['textError'] = Label::findOne(65)->label;
$result['flag'] = 2;
} else {
$result['textError'] = Label::findOne(310)->label;
$result['flag'] = 1;
$companyInfo = CompanyInfo::findOne(1);
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "From: " . $companyInfo->email . "\r\n";
$messageAdmin = "";
$product = Product::findOne($_POST['product_id']);
$modelBroshura = new StatisticBroshura();
$file = $product->getBroshuraDownload($product->id);
if (isset($file) && $modelBroshura->save()) {
if (isset($_POST['StatisticBroshura'])) {
$request_broshura = new StatisticBroshura();
$request_broshura->names = $_POST['names'];
$request_broshura->firma = $_POST['firma'];
$request_broshura->email = $_POST['email'];
$request_broshura->phone = $_POST['phone'];
$request_broshura->country = $_POST['country'];
$request_broshura->product_id = $_POST['product_id'];
$request_broshura->save(false);
}
}
$messageBroshura = Label::findOne(306)->label;
$messageAdmin .= "<div style=\"width: 800px;\"><center><a href=\"http://" . $_SERVER['SERVER_NAME'] . "\"><img src='http://" . $_SERVER['SERVER_NAME'] . "/images/logo-header.png' alt=\"OPTIXCO\" /></a></center><h1><center>Изтеглена е брошура от : " . $_POST['email'] . "!</center></h1>";
$messageAdmin .= "<table width=\"800px\" style=\"border-collapse: collapse; border: 1px solid black; margin-bottom: 30px;\">";
$messageAdmin .= "<tr style=\"background-color: #ddd; border: 1px solid black;\"><td colspan=\"2\"><h2><center>Информация на потребителя: </center></h2></td></tr>";
$messageAdmin .= "<tr style=\"border: 1px solid black;\"><td style=\"border: 1px solid black;\">Имена: </td><td style=\"border: 1px solid black;\">" . $_POST['names'] . "</td></tr>";
$messageAdmin .= "<tr style=\"border: 1px solid black;\"><td style=\"border: 1px solid black;\">Имейл: </td><td style=\"border: 1px solid black;\">" . $_POST['email'] . "</td></tr>";
$messageAdmin .= "<tr style=\"border: 1px solid black;\"><td style=\"border: 1px solid black;\">Телефон: </td><td style=\"border: 1px solid black;\">" . $_POST['phone'] . "</td></tr>";
$messageAdmin .= "<tr style=\"border: 1px solid black;\"><td style=\"border: 1px solid black;\">Държава: </td><td style=\"border: 1px solid black;\">" . $_POST['country'] . "</td></tr>";
$messageAdmin .= "<tr style=\"border: 1px solid black;\"><td style=\"border: 1px solid black;\">Фирма/Организация: </td><td style=\"border: 1px solid black;\">" . $_POST['firma'] . "</td></tr>";
$messageAdmin .= "<tr style=\"border: 1px solid black;\"><td style=\"border: 1px solid black;\">Брошура за продукт: </td><td style=\"border: 1px solid black;\">" . $product->title . "</td></tr>";
$messageAdmin .= "</table></div>";
@mail($companyInfo->email2, "Изтегляне на брошура - " . $_SERVER['SERVER_NAME'], $messageAdmin, $headers);
$result['file'] = Yii::$app->response->sendFile(Yii::getAlias('@frontend/web') . $file);
}
echo json_encode($result);
}
}
Я пробовал использовать переменную $ result и вернуть файл, но не работал с обоими методами ...

Вы не можете скачать файл с помощью AJAX потому что JavaScript не может сохранять файлы непосредственно на компьютер пользователя
Для получения дополнительной информации обратитесь к этому:
Ты можешь сделать это: 1) добавьте в форму пустой тег href:
<a id = "download-broshura" name = "download-file" download> </a>
2) в контроллере измените URL-адрес пути к файлу:
$result['file'] = $file;
3) добавьте это в свою функцию ajax:
document.getElementById('download-broshura').click();
это будет имитировать щелчок, и файл будет загружен автоматически