我正在制作一个使用openweathermap.org API的网页。出于某种原因,当我进行AJAX调用并使用weather.open(blah,blah,true)打开API时
function executeWeatherCity(cityName){
var weather = new XMLHttpRequest();
weather.open('GET', url + "q=" + cityName + apiKey, true); //make a get request
weather.send(null);
var response = JSON.parse(weather.responseText); //store response properties
document.getElementById('output').textContent = response.wind.speed; //store current wind speed
event.preventDefault();
weather.send(null);
}
控制台在行var response = JSON.parse(weather.responseText)上给我一个错误
最初,当我将weather.open的值设置为(blah,blah,false)时,它工作(同步)。我不确定这是否是我对同步性理解的差距。但这真的令人沮丧,因为它应该基于我见过的可比较的例子。
另外,有趣的是,当我在console.log(weather.status)时,我总是得到0 ...提前感谢您的帮助!
答案 0 :(得分:0)
因为您正在触发异步方法,所以在SEO Url
domain.com/blog/asset/jquery.js?v=1.00
Real Url
domain.com/blog/includes/libs/minify/g=jquery.js?v=1.00
方法之后响应尚未可用。您必须使用.send()
事件:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange
onreadystatechange
答案 1 :(得分:0)
是的,这是你理解中的一个空白: - )
从同步更改为异步使您有必要处理代码完成后“一段时间”内的(异步)响应
这就是为什么ajax gods发明了一个名为readystatechange
的事件,您可以使用XMLLHttpRequest对象的onreadystatechange
处理该事件
var weather = new XMLHttpRequest();
weather.open('GET', url + "q=" + cityName + apiKey, true);
weather.onreadystatechange = function() {
if(weather.readyState == 4 && weather.status == 200) {
var response = JSON.parse(weather.responseText);
document.getElementById('output').textContent = response.wind.speed;
}
};
weather.send();