我的xhr.onreadystatechange函数在运行if代码之前运行else代码两次

时间:2017-05-29 16:04:42

标签: javascript weather-api yahoo-weather-api

我正在使用JavaScipt创建一个简单的天气应用程序。我的目标是当用户键入某个位置并且天气提供者没有该位置时,则输入框会抖动(这就是loadWeatherError()所做的)。下面的代码运行else语句两次,然后运行if代码。这意味着loadWeatherError()函数正在运行两次,即使该位置有效,输入框也会抖动。因此,当我运行它时,我得到错误2警报两次,然后错误1警报一次。是否有一种方法只会使loadWeatherError()函数只运行一次并且仅在天气提供者没有返回正确的数据时运行?



xhr.onreadystatechange = function() {
  var DONE = 4; // readyState 4 means the request is done.
  var OK = 200; // status 200 is a successful return.
  if (xhr.readyState === DONE) {
    if (xhr.status === OK)
      alert("Error 1");
    var data = JSON.parse(xhr.responseText);
    if (data.response) { //deal with wunderground api

    } else { //deal with Yahoo api

    }
  } else {
    alert("Error 2");
    loadWeatherError();
    options.error("There is a problem receiving the latest weather. Try again.");
  }

};




1 个答案:

答案 0 :(得分:1)

正在发生的事情是你的状态正在改变,但它不等于4.你必须经历每个就绪状态才能达到DONE值。每次状态更改时,您的代码都会运行,这是导致错误的原因。如果状态不正确,请删除输出错误的代码:

dec_cell.zero_state(batch_size, dtype=tf.float32)