2017-02-19 9 views
0

jqueryとjson配列を使用して、現在の月面と日の出/時刻をWebサイトに表示しています。これは日の出/日のためにうまく動作しますが、私は問題に遭遇したムーンフェイズのために働きます。Jqueryを使用してAPIからJSONデータを表示 - 未定義の表示

データが要求された日に "closestphase"が指定されている場合、他の2つのフィールド、 "currentphase"と "fracillum"が削除されます。 http://api.usno.navy.mil/rstt/oneday?date=today&coords=54.97N,1.61W&tz=0

が、このデータから省略されています: http://api.usno.navy.mil/rstt/oneday?date=01/28/2017&coords=54.97N,1.61W&tz=0

これは、以下のリンクがfracillumと現在のフェーズを示したとえば...私は相または現在の照明月額4回を表示することはできません

を意味し、私はCURPHASEとfracillumがclostestphase未定義であれば言って以下のコードを書いた

「ニュームーン」や「満月」はその後、それぞれ「0%または 『100%』のfracillumが表示される。

誰かが私が間違っていることを特定できますか?

$(document).ready(function(){ 
    $.get("http://api.usno.navy.mil/rstt/oneday?date=01/28/2017&coords=54.97N,1.61W&tz=0", function(data){ 
    checkPhase(data); 
    }); 
}); 
$(document).ready(function(){ 
    $("#suntimes").click(function(){  
    $("#sun").toggle("slide"); 
    }); 
}); 
$(document).ready(function(){ 
    $("#moontimes").click(function(){  
    $("#moon").toggle("slide"); 
    }); 
}); 
$(document).ready(function(){ 
    $("#Mobilesuntimes").click(function(){  
    $("#Mobilesun").slideToggle(); 
    }); 
}); 
$(document).ready(function(){ 
    $("#Mobilemoontimes").click(function(){  
    $("#Mobilemoon").slideToggle(); 
    }); 
}); 

function checkPhase(data){ 
    if(data.curphase == "undefined" && data.closestphase.phase == "New Moon"){data.fracillum == "0%";} 
    else if(data.curphase == "undefined" && data.closestphase.phase == "Full Moon") 
    {data.fracillum == "100%";} 

    $("#sun").append("<p><b>Newcastle, UK</b><br />Sunrise: " + data.sundata[1].time + " AM<br />Sunset: " + data.sundata[3].time + " PM</p>"); 
    $("#moon").append("<p><b>Newcastle, UK</b><br />Percentage Illuminated: " + data.fracillum + "<br />Moon Phase: " + data.curphase + "</p>"); 
    $("#Mobilesun").append("<p><b>Newcastle, UK</b><br />Sunrise: " + data.sundata[1].time + " AM<br />Sunset: " + data.sundata[3].time + " PM</p>"); 
    $("#Mobilemoon").append("<p><b>Newcastle, UK</b><br />Percentage Illuminated: " + data.fracillum + "<br />Moon Phase: " + data.curphase + "</p>" 
); 
} 

答えて

0

"undefined"

また、割り当て(data.fracillum = "0%";)の代わりに比較(data.fracillum == "0%";)があるため、data.fracillumに値を割り当てないでください。

あなたの条件は次のようになります。

それはより安定したが、([だから、undefined` `をチェックするためのよりよい解決策のように聞こえるtypeof`
if (data.curphase === undefined && data.closestphase.phase === "New Moon") { 
    data.fracillum = "0%"; 
} else if (data.curphase === undefined && data.closestphase.phase === "Full Moon") { 
    data.fracillum = "100%"; 
} 
+0

私はこれを使いました。 –

1

使用typeof data.curphase == "undefined"代わりにあなたはcurphaseが文字列である場合はチェックしているため、あなたが代わりにvalue === "undefined"value === undefinedを使用shoud undefined値をチェックしたい場合はdata.curphase == "undefined"

var a = 1; 
 

 
if (typeof a == "undefined") 
 
    alert (" a is undefined") 
 

 
if (typeof b == "undefined") 
 
    alert (" b is Undefined")

+0

' http://stackoverflow.com/a/3390426/ 1751277](http://stackoverflow.com/a/3390426/1751277))。私はそれについて考えなかった。 – floriangosse

+0

この回答をお寄せいただきありがとうございます。私は実際には以下の回答を最初に見て、それを使用しました。 –

+0

はい、 'typeof'はより信頼性が高く、エラーを防止します。 @floriangosse。 あなたのウェルカム@ JRat-UK – Eisa

関連する問題