2017-02-19 15 views
0

Я использую jquery и json array для отображения текущей фазы луны и восхода/установки времени на веб-сайте. Это отлично работает для восхода/установки, но для фаз луны я столкнулся с проблемой.Использование JQuery для отображения данных JSON из API - отображение undefined

Когда «ближайшая фаза» находится в тот же день, когда запрашиваются данные, удаляются еще 2 поля - «currentphase» и «fracillum». Это означает, что я не могу отображать фазовое или ток освещения 4 раза в месяц ...

Например, ссылка ниже показывает 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

Я написал следующий код, чтобы сказать, если curphase и fracillum неопределен и clostestphase является «Новолуние» или «Full Moon», а затем отобразить fracillum «0% или„100%“соответственно.

Пожалуйста, кто-нибудь может определить, что я делаю неправильно?

$(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 значения вам следует использовать value === undefined вместо value === "undefined", потому что проверка, если curphase является строка "undefined".

Также вы не назначаете значение data.fracillum, поскольку сравнение (data.fracillum == "0%";) вместо назначения (data.fracillum = "0%";).

Ваше состояние должно выглядеть следующим образом:

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" вместо data.curphase == "undefined"

var a = 1; 
 

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

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

+0

'typeof' звучит как лучшее решение для проверки на' undefined', потому что это более стабильным ([http://stackoverflow.com/a/3390426/ 1751277] (http://stackoverflow.com/a/3390426/1751277)). Я не думал об этом. – floriangosse

+0

Спасибо за этот ответ, я на самом деле видел ответ ниже и использовал его - кажется, сработал, спасибо еще раз, но –

+0

да 'typeof' более надежный и предотвращает ошибки. @floriangosse. Ваш приветственный @ JRat-UK – Eisa