Javascript 将HolidayAPI用于银行假日
问题: 如果日期是银行假日,如何使用API返回布尔值 我做了一些研究,发现了一个很棒的免费API,其中包含银行假期,但是我在使用它时遇到了问题: 如果我要使用此代码: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
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)