Проверил, действительно не работает:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.weather.yandex.ru/v2/informers?lat=55.75396&lon=37.620393');
xhr.setRequestHeader('X-Yandex-API-Key', '04aa3404-32a8-4baf-a280-db8a58bb908a');
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
var obj = JSON.parse(xhr.responseText);
console.log('Успех:');
console.dir(obj);
}
else {
console.log('Ошибка:');
console.dir(xhr);
}
}
}
xhr.send();
Происходит это из-за отсутствия заголовка
Access-Control-Allow-Origin на стороне Яндекса. Вам необходимо связаться с технической поддержкой Яндекса и уточнить почему отсутствует этот заголовок - возможно они просто недоглядели и это ошибка с их стороны, а возможно так и заудмано, что с фронта нельзя запросить погоду. В последнем случае, вам нужно проксировать запрос через свой сервер используя либо CURL либо file_get_contents()
Если не знаете, что именно писать в Яндекс, просто дайте им ссылку на мой ответ, их спецы поймут о чем речь.