2016-06-08 27 views
11

Tôi đang cố gắng tạo một ứng dụng thời tiết hiển thị thời tiết và nhiệt độ của nhiều ngày trong tuần. Tôi hiện đang sử dụng openweathermap api cho nhiệm vụ như vậy, điều là những thông tin mà tôi muốn (đó là ngày của thời tiết) chỉ có định dạng xml. Vì tôi đang xây dựng lại nó trong ES6 (ES2015) vì lý do học tập, tôi cũng muốn sử dụng tìm nạp api nhưng vì phương thức tìm nạp phân tích nó, nó chỉ cung cấp một lỗi. vì vậy làm thế nào tôi có thể lấy nó hoặc mby có một cách tốt hơn để làm điều đó.Cách tìm nạp XML với tìm nạp api

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)) 

Trả lời

7

Tôi đoán lỗi đến từ hàm này: response => response.json() vì phản hồi không phải là đối tượng JSON hợp lệ (đó là XML). Theo tôi biết, không có trình phân tích cú pháp XML nguyên gốc cho fetch, nhưng bạn có thể xử lý phản hồi dưới dạng văn bản và sử dụng công cụ của bên thứ ba để thực hiện phân tích cú pháp thực tế, ví dụ jQuery có chức năng $.parseXML().

Nó sẽ giống như thế:

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)) 
} 
+3

Tôi có thể khẳng định rằng không có phân tích cú pháp XML bản địa cho tìm nạp. Xem https://developer.mozilla.org/en-US/docs/Web/API/Response#Methods. – Marco

13

Sử dụng bản địa DOMParser getCurrentCity (địa điểm) có thể được viết:

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)) 
 
}

Các vấn đề liên quan