2017-02-19 3 views
0

Ich benutze jquery und ein JSON-Array, um die aktuelle Mondphase und Sonnenaufgang/Uhrzeit auf einer Website anzuzeigen. Dies funktioniert gut für Sonnenaufgang/Set aber für Mondphasen habe ich ein Problem festgestellt.Verwenden von Jquery zum Anzeigen von JSON-Daten aus der API - undefiniert

Wenn die "nächste Phase" am selben Tag ist, an dem die Daten angefordert werden, werden 2 andere Felder entfernt - "currentphase" und "fracillum". Dies bedeutet, dass ich nicht die Phase oder die aktuellen Beleuchtung 4-mal pro Monat angezeigt werden kann ...

Zum Beispiel unter dem Link fracillum und aktuelle Phase zeigt: http://api.usno.navy.mil/rstt/oneday?date=today&coords=54.97N,1.61W&tz=0

aber wird aus diesen Daten nicht angegeben: http://api.usno.navy.mil/rstt/oneday?date=01/28/2017&coords=54.97N,1.61W&tz=0

ich habe den Code geschrieben zu sagen, wenn curphase und fracillum und undefiniert ist die clostestphase ist „New Moon“ oder „Vollmond“ dann fracillum von „0% oder‚100%‘angezeigt sind.

Bitte kann jemand identifizieren, was ich falsch mache?

$(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>" 
); 
} 

Antwort

0

Wenn Sie für einen undefined Wert überprüfen Sie value === undefined statt value === "undefined" verwenden shoud, da Sie überprüfen, ob curphase die Zeichenfolge "undefined".

Auch data.fracillum wird kein Wert zugewiesen, da ein Vergleich (data.fracillum == "0%";) anstelle einer Zuweisung (data.fracillum = "0%";) erfolgt.

Ihr Zustand sollte wie folgt aussehen:

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

Ich habe das verwendet und es scheint perfekt funktioniert zu haben, danke! –

1

Verwenden typeof data.curphase == "undefined" statt data.curphase == "undefined"

var a = 1; 
 

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

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

+0

'typeof' wie eine bessere Lösung klingt für die Überprüfung für' undefined', weil es stabiler ist ([http://stackoverflow.com/a/3390426/ 1751277] (http://stackoverflow.com/a/3390426/1751277)). Ich habe nicht darüber nachgedacht. – floriangosse

+0

Danke für diese Antwort, ich sah tatsächlich die Antwort unten zuerst und verwendet, dass - es scheint, hat funktioniert, danke wieder einmal, obwohl –

+0

ja 'typeof' ist zuverlässiger und Fehler zu verhindern. @ Floriangosse. Ihr Willkommen @ JRat-UK – Eisa

Verwandte Themen