Javascript 将HolidayAPI用于银行假日

Javascript 将HolidayAPI用于银行假日,javascript,api,Javascript,Api,问题: 如果日期是银行假日,如何使用API返回布尔值 我做了一些研究,发现了一个很棒的免费API,其中包含银行假期,但是我在使用它时遇到了问题: 如果我要使用此代码: var year = 2016; var month = 3; var day = 25; var isAHoliday = false; $.getJSON( "http://holidayapi.com/v1/holidays?country=GB&year=" + year + "&a

问题: 如果日期是银行假日,如何使用API返回布尔值

我做了一些研究,发现了一个很棒的免费API,其中包含银行假期,但是我在使用它时遇到了问题:

如果我要使用此代码:

 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
                }
          });               
我希望能够根据是否返回任何数据返回true或false值,但是由于未调用getJSON请求,我做错了什么,请有人纠正我哪里出错了

返回
{“状态”:200,“假日”:[{“名称”:“耶稣受难节”,“国家”:“GB”,“日期”:“2016-03-25”}}

返回
{“状态”:200,“假日”:[]}

这似乎导致了一个问题:
“http://holidayapi.com/v1/holidays?country=GB&year=“+year+”&month=“+month+”&day=“+day如果我通过上面两个URL中的一个,我就得到了正确的结果,我现在正在玩这个游戏


必须将
假日
对象作为返回的
数据
对象的子对象调用:

由于
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;
}

您不必声明局部变量,您可能会使用在其他地方声明的局部变量,但这取决于您。

必须将
假日
对象作为返回的
数据
对象的子对象调用:

由于
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;
}

您不必声明局部变量,您可能会使用其他地方声明的局部变量,但这取决于您。

如果您只想返回
true
值(如果所选日期是假日),或者
false
如果不是假日,则可以使用如下函数:

(请注意,JSFIDLE不会使用“http://”协议执行对URL的任何AJAX调用,因为它不安全。)


如果还想返回假日的名称和国家/地区,可以替换为
isaheliday=data.holidays[0]
if
语句中。

如果您只想返回
true
值(如果所选日期是假日),或者
false
如果不是假日,则可以使用如下函数:

(请注意,JSFIDLE不会使用“http://”协议执行对URL的任何AJAX调用,因为它不安全。)



如果还想返回假日的名称和国家/地区,可以替换为
isaheliday=data.holidays[0]
if
语句中。

你的问题是什么?您正在询问如何读取服务器返回的值,或者在执行此操作时遇到任何错误?如果未调用
$.getJSON
,则代码可能位于未执行的位置(例如在错误的
If
语句中),或者在运行此代码之前未包含jQuery库。不是实际的,现在需要API密钥,“API键参数是必需的。”您的问题实际上是什么?您正在询问如何读取从服务器返回的值,或者您在执行时遇到任何错误?如果未调用
$.getJSON
,则代码可能位于未执行的某个位置(例如在错误的
If
语句中)或者在运行此代码之前没有包含jQuery库。不是实际的,现在需要API密钥,“API密钥参数是必需的。“不幸的是,使用您的逻辑仍然没有返回任何值,myDate仍然未定义。如果您将
数据
对象打印到控制台,输出内容是什么?无:/in,它甚至没有击中控制台。log()命令您可以发布完整的JavaScript或将其全部放在JSFIDLE中吗?发布在上面底部的答案上不幸的是,使用您的逻辑仍然没有返回任何值,myDate仍然未定义如果您将
数据
对象打印到控制台,输出是什么?没有:/as in,它甚至没有击中控制台。log()命令您可以发布完整的JavaScript或将其全部放在JSFIDLE中吗?如果我将其放在if语句中,例如if(isDateAHoliday(“2016”、“3”、“25”)==true){}或者if(isDateAHoliday(“2016”、“3”、“25”)在上面的底部答案上发布==false},两者都不是HITAH,这一定是因为
$.getJSON
异步运行,在
if
语句求值之前不会收到结果。我相信最好的方法是将数据操作逻辑保留在回调函数中,以便保证数据可用。我将重构函数有一点,所以它使更多的唤醒了你的答案,并把它放在一个函数中,该函数每秒调用JSON请求(奇数情况下,需要超过1个),并且工作完美,谢谢你的帖子,我把它放在一个if语句中,例如if(isDateAH)