AJAX Open方法和同步性

时间:2016-05-19 06:50:30

标签: javascript jquery json ajax

我正在制作一个使用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 ...提前感谢您的帮助!

2 个答案:

答案 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();