当我把这个放到浏览器中时,它带回来的json对象和所有的天气数据都很好。http:/api.openweathermap.orgdata2.5weather?zip=90210&units=imperial&appid=... ...{API Key}
但是,我用我的XAMPP Apache在htdocs文件夹中尝试在我的代码中测试一下。谁能帮我看看我的代码,看看这里面到底有什么问题?非常感谢你的帮助。
var weatherInfo = document.getElementById("weather");
var zipCodeForm = document.getElementById("zipCodeForm");
function getWeather(zipCode){
//create the url for the request
var endpoint = "http://api.openweathermap.org/data/2.5/weather";
var apiKey = {API Key};
var queryString = "zip=" + zipCode + "&units=imperial&appid=" + apiKey;
var url = endpoint + "?" +queryString;
//create the request to get the weather data
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", responseReceivedHandler);
xhr.requestType = "json";
xhr.open("GET", url);
xhr.send();
console.log("getWeather")
console.log(xhr.response.status);
}
function responseReceivedHandler(){
if(this.status === 200){
weatherInfo.innerHTML = "Current temperature: " + this.response.main.temp;
}
else{
weatherInfo.innerHTML="Not working";
}
console.log("responseReceivedHandler")
}
getWeather(90210);
<body>
<form id="zipCodeForm">
<label for="zipCode">Please enter your zip code: </label>
<input type="text" name="zipCode" id="zipCode">
<input type="submit" name="submit">
</form>
<div id="weather"></div>
</body>
这里是解决方案!
我的响应需要从json转换为javascript对象。当我尝试this.response.main.temp.时,它一直给我undefined。我想出的办法是,当我尝试this.response[0]时,结果是一个"{"。我当时就想,好吧,所以这个一定是无法把这个json解释为一个对象。它只是一个所有json字符的字符串。所以我找到了json.parse(),以便把它变成一个javascript对象,然后咣当--API ping成功,可以访问所有的数据。
或者,你可以直接把 "requestType = "json""改为responseType = json......而不用把它解析成一个对象。这不是 requestType,而是 responseType。是responseType。