backbone javascript xml fetch-api

javascript - backbone js



Cómo obtener XML con fetch api (2)

El uso nativo de DOMParser getCurrentCity (ubicación) se puede escribir:

function getCurrentCity(location) { const lat = location.coords.latitude; const lon = location.coords.longitude; return fetch(apis.currentWeather.url(lat, lon)) .then(response => response.text()) .then(str => (new window.DOMParser()).parseFromString(str, "text/xml")) .then(data => console.log(data)) }

Estoy intentando crear una aplicación meteorológica que muestre el clima y la temperatura de muchos días de la semana. Actualmente estoy usando openweathermap api para esa tarea, lo que pasa es que la información que quiero (que es la fecha del clima) solo viene en formato xml. Ya que lo estoy reconstruyendo en ES6 (ES2015) por razones académicas, también quería usar la api de recuperación, pero como el método de recuperación lo analiza, solo genera un error. Entonces, ¿cómo puedo buscarlo o mby? Hay una mejor manera de hacerlo.

let apis = { currentWeather: { //get user selected recomendation weather api:"http://api.openweathermap.org/data/2.5/forecast/daily?lat=", parameters: "&mode=xml&units=metric&cnt=6&APPID=/*api key*/", url: (lat, lon) => { return apis.currentWeather.api + lat + "&lon=" + lon + apis.currentWeather.parameters } } }; function getCurrentLoc() { return new Promise((resolve, reject) => navigator.geolocation .getCurrentPosition(resolve, reject)) } function getCurrentCity(location) { const lat = location.coords.latitude; const lon = location.coords.longitude; return fetch(apis.currentWeather.url(lat, lon)) .then(response => response.json()) .then(data => console.log(data)) } getCurrentLoc() .then( coords => getCurrentCity(coords))


Supongo que el error proviene de esta función: response => response.json() ya que la respuesta no es un objeto JSON válido (es XML).

Por lo que sé, no hay un analizador XML nativo para fetch , pero puede manejar la respuesta como texto y usar una herramienta de terceros para realizar el análisis real, por ejemplo, jQuery tiene una función $.parseXML() .

Se verá algo así como:

function getCurrentCity(location) { const lat = location.coords.latitude; const lon = location.coords.longitude; return fetch(apis.currentWeather.url(lat, lon)) .then(response => response.text()) .then(xmlString => $.parseXML(xmlString)) .then(data => console.log(data)) }