На странице есть форма:
form method="post" :action="`/api/project/....
В ответ приходит файл и начинается скачивание.
Но иногда данных нет и приходит 404.
Как-то можно перехватить этот ответ и высветить уведомление что данных нет?
Пока делаю через редирект на сервере, но при этом происходит перезагрузка страницы, что не круто.
Чем больше знаю, тем лучше понимаю, как мало знаю.
Через AJAX отправляйте запрос на проверку POST-данных. Если прийдёт ответ OK, или прямой URL на скачиваемый файл (вам решать по удобству) - вот тогда уже и делайте само скачивание... А в случае ошибки - alert() конечно, и пусть исправляют POST-данные.
Я не уверен, что скажу правильно, но разве нельзя в файле, который указан в action проверить $_POST на пустоту и в зависимости от этого уже запускать скачивание, либо выдавать ошибку?
Перехватить ничего нельзя.
Можно по onsubmit:
a) скачивать файл ajax'ом, и после этого отдавать при наличии.
b) делать предварительно HEAD запрос, и только если статус не 404 вызывать реальный submit.
Вариант a не подходит для больших файлов, т.к. жрёт память. Вариант b делает лишний запрос.
Правильный вариант - переработать логику сервера и формы.
function UrlExists(url,alert=false) {
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
if (http.status != 404)
// do something
else {
if (alert) alert(alert);
window.location.reload();
}
}