JavaSciptで簡単な天気アプリを作っています。私の目標は、ユーザーが場所を入力し、天気提供者にその場所がない場合、入力ボックスが揺れます(これはloadWeatherError()と同じです)。以下のコードは、elseステートメントを2回実行してから、ifコードを実行しています。これは、loadWeatherError()関数が2回実行されており、場所が有効であっても入力ボックスが揺れることを意味します。だから、私がそれを実行すると、エラー2アラートが2回、エラー1アラートが1回表示されます。 loadWeatherError()関数は一度しか実行せず、天気プロバイダが正しいデータを返さなかった場合にのみ実行する方法がありますか? 私のxhr.onreadystatechange関数はifコードを実行する前にelseコードを2回実行しています
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〜3をエラーとみなす理由を少し混乱させています。 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState – Taplar
あなたの問題が{}を使用していない内部のOKチェックでない限り、それ以外のものはそれとペア設定されません。 – Taplar
私は状態0-3をエラーと見なしません。何が起こっているかは、状態が関数を実行するたびに変更され、状態4ではelseコードが実行されないためです。それから、次の状態に到達し、elseコードは状態4に達するまで再び実行されます。しかし、このコードに基づいてどのように起こるかわかりません。 –