$.ajax({
url : '/download-action',
type : 'POST',
async : false,
beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-TOKEN', $("#token").attr('value'));
},
data : JSON.stringify(sources),
success : function(data) {
}
});
header("Pragma: public");
header("Content-Type: text/plain; charset=utf-8");
header("Content-Disposition: attachment; charset=utf-8; filename=\"file.txt\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . strlen($file_content));
echo $file_content;
// Создаём ссылку на него
const url = URL.createObjectURL(blob);
// А теперь маленький трюк, чтоб скачать
const dummy = document.createElement('a');
dummy.href = url;
dummy.download = 'my-filename.ext';
document.body.appendChild(dummy);
dummy.click(); // Готово
$(function () {
$('form').submit(function () {
$('#loader').show();
$.ajax({
url: $(this).attr('action'),
data: $(this).serialize(),
dataType: 'binary',
xhrFields: {
'responseType': 'blob'
},
success: function(data, status, xhr) {
$('#loader').hide();
// if(data.type.indexOf('text/html') != -1){//Если вместо файла получили страницу с ошибкой
// var reader = new FileReader();
// reader.readAsText(data);
// reader.onload = function() {alert(reader.result);};
// return;
// }
var link = document.createElement('a'),
filename = 'file.xlsx';
// if(xhr.getResponseHeader('Content-Disposition')){//имя файла
// filename = xhr.getResponseHeader('Content-Disposition');
// filename=filename.match(/filename="(.*?)"/)[1];
// filename=decodeURIComponent(escape(filename));
// }
link.href = URL.createObjectURL(data);
link.download = filename;
link.click();
}
});
return false;
});
});
Uncaught DOMException: Failed to read the 'responseText' property from 'XMLHttpRequest': The value is only accessible if the object's 'responseType' is '' or 'text' (was 'blob').