Попытка использовать чистый подход JS, чтобы проверить, есть ли у меня действительный URL-адрес изображения JS. Я получаю предупреждение, что XMLHttpRequest устарела. Какой лучший способ сделать это?

urlExists(url) {
    const http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    if (http.status !== 404) {
      return true;
    }
    return false;
  }
7
allencoded 7 Дек 2016 в 04:49

3 ответа

Лучший ответ

Вы, вероятно, получаете сообщение о том, что синхронное использование XMLHttpRequest устарело (из-за его вредного влияния на работу пользователя; оно останавливает страницу во время ожидания ответа). Я могу заверить вас, что правильное асинхронное использование этого API не считается устаревшим.

Вот пример кода для правильного использования:

var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
    if (this.readyState === this.DONE) {
        console.log(this.status) // do something; the request has completed
    }
}
xhr.open("HEAD", "http://example.com") // replace with URL of your choosing
xhr.send()
7
gyre 7 Дек 2016 в 02:05

Предупреждение, вероятно, потому что вы пытаетесь сделать синхронный запрос.

1
user744621 7 Дек 2016 в 01:54

Причиной предупреждения было то, что в http.open('HEAD', url, false); вы указали третий аргумент (асинхронный) как false. Согласно https://xhr.spec.whatwg.org/#synchronous-flag это должно быть установлено в true.

0
bakrall 27 Мар 2020 в 08:32