2017-05-29 3 views
0

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

値を確認するためにコンソールにログを記録しましたか?私は、状態0〜3をエラーとみなす理由を少し混乱させています。 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState – Taplar

+0

あなたの問題が{}を使用していない内部のOKチェックでない限り、それ以外のものはそれとペア設定されません。 – Taplar

+0

私は状態0-3をエラーと見なしません。何が起こっているかは、状態が関数を実行するたびに変更され、状態4ではelseコードが実行されないためです。それから、次の状態に到達し、elseコードは状態4に達するまで再び実行されます。しかし、このコードに基づいてどのように起こるかわかりません。 –

答えて

0

何が起こっているあなたの状態が変化しているが、それはあなたがDONE値に到達するために準備状態のそれぞれを通過する必要が4に等しいされていません。状態が変わるたびにコードが実行されているため、エラーが発生します。状態が正しくない場合、エラーを出力するコードを削除します。

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"); 
    } else { 
     alert("Error 2"); 
     loadWeatherError(); 
     options.error("There is a problem receiving the latest weather. Try again."); 
    } 
    var data = JSON.parse(xhr.responseText); 
    if (data.response) { //deal with wunderground api 

    } else { //deal with Yahoo api 
     alert("Error 2"); 
     loadWeatherError(); 
     options.error("There is a problem receiving the latest weather. Try again."); 
    } 
    } 
}; 
+0

しかし、気象データが取得されないか、ユーザーが間違った場所を入力した場合、エラーメッセージは表示されません。 –

+0

ここで、私はそれを編集します! 1秒 –

+0

それは動作しません。 –

関連する問題