Member 12861628 Ответов: 2

Почему мой xmlhttprequest (). status 404, даже если url-адрес существует?


Я пытаюсь построить приложение для прогноза погоды, как проект для FreeCodeCamp. Когда я набираю свой url-адрес в браузере, он выводит данные. Однако мой статус по-прежнему 404, хотя мой readyState равен 4.

Это и есть код.
var APPID = "85b5c033328a263ce0ee20b8a0b4ac30";
var temperature;
var weather;
var windSpeed;
var direction;

function getData(latitude, longitude) {
    var url = "api.openweathermap.org/data/2.5/weather?lat=" + latitude + "&lon=" + longitude + "&APPID=" + APPID + "&callback=JSON_CALLBACK";
    sendRequest(url);
}

function sendRequest(url) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        console.log("state " + xmlhttp.readyState);
        console.log("status " + xmlhttp.status);
        console.log(url);
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var data = JSON.parse(xmlhttp.responseText);
            weather = {};
            weather.name = data.name;
            weather.temperature = data.main.temp;
            weather.wind = data.wind.speed;
        }
    };
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}

function update(weather) {
    temperature.innerHTML = weather.temperature;
}

window.onload = function() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            var lat = position.coords.latitude;
            var long = position.coords.longitude;
            getData(lat, long);
        });
    }

}



Что я уже пробовал:

Я пробовал изменяя свою "&амп;обратного вызова=JSON_CALLBACK" на "&амп;режим=в формате XML", но она по-прежнему выдается 404.

2 Ответов

Рейтинг:
2

Member 12861628

Я придумал решение. В URL-адресе мне нужно было добавить http: / / в начало url-адреса.


Рейтинг:
0

Jochen Arndt

Состояние чтения 4 указывает на то, что вы получили ответ, который в вашем случае равен 404 (не найден). Он говорит вам, что сервер на api.openweathermap.org работает (ответ 404 оттуда), но локальная часть URL-адреса недействительна.

Вы посмотрели на сообщение 404 в xmlhttp.responseText?
Это должно дать вам подсказку о том, какая часть недействительна.

Согласно с Текущие данные о погоде - OpenWeatherMap[^] формат по умолчанию-Джейсон и callback определяет функцию обратного вызова JavaScript, которая должна быть реализована. Так что не должно быть никакой необходимости использовать callback или mode параметр.

Вы также можете попробовать его только с помощью lat и lon параметры, а также-поскольку он работает в браузере - с помощью URL-адреса, введенного в браузере для тестирования (то есть настройки вашего url переменная к этой фиксированной строке).

Попробуйте также использовать нижний регистр appid параметр (параметры могут быть чувствительны к регистру).

См. Также эту тему поддержки (особенно сообщение от Ивана 15 сентября 2015 года 03:51 вечера UTC): OpenWeatherMap | ошибка: не найден город[^]


Member 12861628

Спасибо за ваш ответ, но когда я ввел свой url-адрес в свой браузер, я получил этот ответ

{"coord": {"lon": 96.16,"lat": 16.81}, "weather": [{"id":802, "main": "Clouds", "description": "scattered clouds","icon":"03n"}],"base":"stations","main":{"temp":300.15,"pressure":1009,"humidity":78,"temp_min":300.15,"temp_max":300.15},"visibility":7000,"wind":{"speed":2.6,"deg":350},"clouds":{"all":40},"dt":1479727800,"sys":{"type":1,"id":7988,"message":0.0066,"country":"MM","sunrise":1479685376,"sunset":1479725982},"id":1298824,"name":"Rangoon","cod":200}

Я знаю, что это не ошибка URL-адреса, так что что-то должно быть не так с самим кодом.

Jochen Arndt

Вы опубликовали ответ, показанный в вашем браузере.
Но вы должны показать (и жесткий код для тестирования) URL-адрес, введенный в поле URL браузера.

Member 12861628

Это url-адрес:
http://api.openweathermap.org/data/2.5/weather?lat=16.84665464876105&lon=96.11747870679461&APPID=85b5c033328a263ce0ee20b8a0b4ac30

Jochen Arndt

И вы сами нашли решение:
Вы пропустили часть http::/.