我正在使用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.");
}
};

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