Как определить ошибку: net::ERR_NAME_NOT_RESOLVED. XMLHttpRequest. CORS

У меня есть веб-сайт, серверная часть которого находится на другом хостинге. Я отправляю данные формы с помощью XHRHttpRequest. Однако иногда мой провайдер недоступен или ведутся какие-то технические работы на сервере хостинга. И при отправке формы пользователь не получает никаких уведомлений, так как не было ответа от сервера. И даже в консоли статус ошибки не показывает (400, 500 и т. Д.). Только есть такой текст ошибки: net::ERR_NAME_NOT_RESOLVED. Итак, вопрос в том, как мне обнаружить ошибку на стороне сервера, чтобы показать пользователю соответствующее уведомление?

const form = document.getElementById('contact_form');
form.addEventListener('submit', function(e) {
  e.preventDefault();
  const send = {
    name: document.querySelector('input[name=name]').value,
    email: document.querySelector('input[name=email]').value,
    subject: document.querySelector('input[name=subject]').value,
    message: document.querySelector('input[name=message]').value
  };
  const jsonString = JSON.stringify(send);
  const xhr = new XMLHttpRequest();
  const action = form.getAttribute('action');
  xhr.open('POST', action, true);
  xhr.setRequestHeader('Content-type', 'text/plain');
  xhr.onload = function() {
        if (this.readyState == 4 && this.status == 200) {
          alert(xhr.responseText);
    };
  xhr.send(jsonString);
});

Я пытался делать так:

if (this.readyState == 0) {
   alert('Сервер временно недоступен. Попробуйте позже!');
}

и так:

if (this.readyState != 0) {
   alert('Сервер временно недоступен. Попробуйте позже!');
}

и так:

if (this.status == 503) {
   alert('Сервер временно недоступен. Попробуйте позже!');
}

и так:

if (this.status != 200) {
   alert('Сервер временно недоступен. Попробуйте позже!');
}

Но все равно не работает.

UPD. Ответ есть здесь То есть сервер должен ответить с соответствующими заголовками и указать статус отправки данных. Однако возможно есть идеи, как можно уведомить пользователя, что данные на сервер не пошли из за технической ошибки? Чтобы он не сидел и без конца тыкал кнопку "Отправить" и не думал почему ничего не происходит.


Ответы (0 шт):