Вызов веб-сервиса через JavaScript не возвращает данные в responseXML

Столкнулся с проблемой при вызове веб-сервиса через JavaScript. Ответ приходит пустым, хотя при обращении к сервису через браузер получаю валидный XML-документ.

Вот мой JavaScript-код:

function запроситьДанные() {
  let запрос;
  if (window.XMLHttpRequest) {
    запрос = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    запрос = new ActiveXObject('Microsoft.XMLHTTP');
  }
  
  let адрес = 'http://примерсервиса.com/api/данные?параметр=значение';
  запрос.open('GET', адрес, true);
  запрос.onreadystatechange = обработатьОтвет;
  запрос.send();
}

function обработатьОтвет() {
  if (запрос.readyState == 4) {
    console.log('Статус:', запрос.status);
    console.log('XML:', запрос.responseXML);
    console.log('Текст:', запрос.responseText);
  }
}

В консоли вижу:

  • readyState: 4
  • status: 0
  • responseXML: null
  • responseText: пусто

Код выполнял в Firefox и IE на разных компьютерах - везде та же проблема. Что может быть не так? Может, дело в настройках сервера?

у меня была похожая проблема недавно. оказалось, что дело было в неправильном contentType. попробуй добавить в запрос заголовок ‘Content-Type’: ‘application/xml’. еще советую проверить, не блокирует ли антивирус запросы - у меня как-то kaspersky мешал. если ничего не поможет, можно попробовать использовать axios вместо XMLHttpRequest, он удобнее и часто решает такие проблемы автоматически. удачи с отладкой!

А вы пробовали использовать fetch вместо XMLHttpRequest? Он проще в использовании и может решить проблему. Вот пример:

fetch(‘http://примерсервиса.com/api/данные?параметр=значение’)
.then(response => response.text())
.then(data => console.log(data))
.catch(error => console.error(‘Ошибка:’, error));

Если не поможет, то возможно дело в настройках CORS на сервере, как уже упомянули. Проверьте это обязательно!

Похоже на проблему с CORS. Сервер скорее всего не разрешает кросс-доменные запросы с вашего сайта. Попробуйте добавить заголовок ‘Access-Control-Allow-Origin’ на сервере или использовать прокси на вашем домене. Также проверьте протокол - если ваш сайт на HTTPS, а сервис на HTTP, браузер может блокировать запрос. Еще вариант - использовать JSONP если сервис его поддерживает. В крайнем случае можно сделать запрос на бэкенде и передать данные на фронт.