问题: 如果日期是银行假日,如何使用API返回布尔值?
我做了一些研究,找到了一个很棒且免费的API,其中包含银行假期,但是我在使用它时遇到了麻烦:http://holidayapi.com/
如果我要使用此代码:
var year = 2016;
var month = 3;
var day = 25;
var isAHoliday = false;
$.getJSON(
"http://holidayapi.com/v1/holidays?country=GB&year=" + year + "&month=" + month + "&day=" + day, function (data) {
console.log(data); //DOES NOT DISPLAY IN CONSOLE
if (data.holidays.length > 0) {
// BANK HOLIDAY
isAHoliday = true;
}
else {
//IS NOT BANK HOLIDAY
//AND NOTHING NEEDS TO BE DONE
}
});
我希望能够返回真值或假值,具体取决于是否返回任何数据,但是由于没有调用getJSON请求我做错了,请有人纠正我哪里出错了?
http://holidayapi.com/v1/holidays?country=GB&year=2016&month=03&day=25返回{"status":200,"holidays":[{"name":"Good Friday","country":"GB","date":"2016-03-25"}]}
http://holidayapi.com/v1/holidays?country=GB&year=2016&month=03&day=26返回{"status":200,"holidays":[]}
看来这会导致问题: "http://holidayapi.com/v1/holidays?country=GB&year=" + year + "&month=" + month + "&day=" + day;
如果我通过上面的2个网址之一,我会得到正确的结果,我现在正在玩游戏这个
答案 0 :(得分:1)
必须将holidays
对象作为返回的data
对象的子对象调用:
由于holidays
对象是一个数组,因此您还需要使用索引来访问项目。假设至少返回了一个项目,您将得到如下日期:
var myDate = data.holidays[0].date;
但是,在获取第一个对象之前,应始终检查数组中是否至少有一个对象:
if(data.holidays.length > 0){...}
顺便说一句,如果你想做的就是检查某个特定日期是否有假期,那么这个if
语句就是你所需要的,因为数组长度大于零意味着至少有一个假期
修改强>
对您的问题的完整答案,您可以将其置于.done()
方法中:
var isAHoliday = false;
if(data.holidays.length > 0){
// There's at least one holiday today!
isAHoliday = true;
}
你不必声明一个局部变量,你可能会使用一个在别处声明的变量,但这取决于你。
答案 1 :(得分:1)
如果您只是想在所选日期是假日时返回true
值,或者false
如果不是,则可以使用如下函数:
(请注意,jsfiddle不会使用" http://"协议对URL执行任何AJAX调用,因为它不安全。)
function isDateAHoliday(y, m, d) {
var jsonURL = "http://holidayapi.com/v1/holidays?country=GB&year=" + y + "&month=" + m + "&day=" + d;
var isAHoliday = false;
$.getJSON(jsonURL, function (data) {
// If the date is a holiday
if (data.holidays.length > 0) {
// Do some things
isAHoliday = true;
}
// Check values
console.log("JSON DATA: ", data);
console.log("Holiday?: " + isAHoliday);
return isAHoliday;
});
}
isDateAHoliday("2016", "3", "25");
如果您想要返回假期的名称和国家/地区,则可以在isAHoliday = data.holidays[0];
声明中替换if
。