Je voulais savoir s'il y avait un moyen de recevoir des informations de l'API via JavaScript. J'essaie actuellement d'utiliser les informations de l'API de www.openweathermap.org mais je ne sais pas comment je peux le faire avec JS. J'ai actuellement essayé

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.openweathermap.org/data/2.5/weather?
lat=38.892634199999996&lon=-77.0689154", false);
xhr.send();

console.log(xhr);

Qui répond et m'envoie des informations au format JS Object:

{ response: {"coord":{"lon":-77.04,"lat":38.9},"weather":[{"id":800,"main":"Clear",
"description":"sky is clear","icon":"01d"}],"base":"cmc stations","main":{
   "temp":301.51,"pressure":1016,"humidity":51,"temp_min":299.15,"temp_max":304.15},
"wind":{"speed":2.6,"deg":360},"clouds":{"all":1},"dt":1436565479,
"sys":{"type":1,"id":1325,"message":0.008,"country":"US","sunrise":1436521925,
"sunset":1436574893},"id":4140963,"name":"Washington, D. C.","cod":200}\n',
  responseText: '{"coord":{"lon":-77.04,"lat":38.9},"weather":[{"id":800,
"main":"Clear","description":"sky is clear","icon":"01d"}],"base":"cmc stations",
"main":{"temp":301.51,"pressure":1016,"humidity":51,"temp_min":299.15,
"temp_max":304.15},"wind":{"speed":2.6,"deg":360},"clouds":{"all":1},
"dt":1436565479,"sys":{"type":1,"id":1325,"message":0.008,"country":"US",
"sunrise":1436521925,"sunset":1436574893},"id":4140963,"name":"Washington, D. C.","cod":200} }

J'ai essayé console.log (xhr.response.coord) et console.log (xhr.responseText.coord) comme exemple et les deux sortent indéfinis. Dois-je faire autre chose pour imprimer les informations?

Je sais que vous pouvez utiliser $ .get (URL, function ()) pour recevoir les informations via JQUERY mais existe-t-il un moyen de le faire simplement JS?

0
jyoon006 11 juil. 2015 à 01:47

3 réponses

Meilleure réponse

Vous devez analyser la chaîne en tant qu'objet JSON. Comme ça:

var data = JSON.parse(xhr.response);
console.log(data.coord);
1
Andrey Etumyan 10 juil. 2015 à 22:50

Votre réponse est en JSON, vous devez donc d'abord l'analyser.

Utilisez JSON.parse(xhr.response) pour analyser la réponse.

Comme ça:

JSON.parse(xhr.response)["coord"]["lat"]
JSON.parse(xhr.response)["coord"]["lon"]
1
david2278 10 juil. 2015 à 23:03

Le gestionnaire de réponse vous manque

var xhr = new XMLHttpRequest();
// when the async call finishes, we need to check what happened
xhr.onreadystatechange=function(){
  // if it finished without errors
  if (xhr.readyState==4 && xhr.status==200){
    // we get the data
    var data = JSON.parse(xhr.responseText);
    // this should be your json
    //console.log(data.response.coord);
    document.getElementById('response').innerHTML = xhr.responseText;
  }
};

// NOTE! for demo purposes I'm using another api query that does not require an api key, change this to your api url
xhr.open("GET", "http://api.openweathermap.org/data/2.5/weather?q=London,uk", false);
xhr.send();
<div id="response"></div>
1
Juank 10 juil. 2015 à 23:03