我遇到这种情况,用户可以在其中设置日期和天数,以便我可以通过javascript方法计算截止日期。我找到了一个API,该API返回我所在城市假期的json对象。问题是,当我调用方法传递一个我知道是假日的日期并且该日期存在于json对象中时,该方法返回false。如果我将方法逐行复制并粘贴到chrome的dev工具上,它将返回true。我想念什么?
OBS:在我的国家/地区中使用的日期格式为dd / mm / YYYY,这就是为什么我使用某些日期格式并与json对象中返回的日期进行比较的原因。
function verifyHoliday(date){
var url = "https://api.calendario.com.br/?json=true&ano=2018&estado=SP&cidade=MOGI_GUACU&token=ZGdvLmRpZWdvY2FydmFsaG9AZ21haWwuY29tJmhhc2g9MTYzMjcxMDY3";
var day = (date.getDate() < 10) ? "0"+date.getDate() : date.getDate();
var dateString = day + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
//====================================================
var holiday = false;
var holidays = [];
$.getJSON(url, function(data){
for(var i = 0; i < data.length; i++){
var obj = {day: data[i].date, name: data[i].name};
holidays[i] = obj;
}
});
for(var i = 0; i < holidays.length; i++){
if(holidays[i].day == dateString){
holiday = true;
break;
}
}
return feriado;
}
答案 0 :(得分:0)
请尝试以下代码-请注意“ $ .getJSON(url).then(函数(数据)){}”,而不是原始代码。
正如某人评论的那样,您的问题似乎是由于您在没有实际回复之前使用了回复。因为$ .getJSON是异步的。
function verifyHoliday(date){
var url = "https://api.calendario.com.br/?json=true&ano=2018&estado=SP&cidade=MOGI_GUACU&token=ZGdvLmRpZWdvY2FydmFsaG9AZ21haWwuY29tJmhhc2g9MTYzMjcxMDY3";
var day = (date.getDate() < 10) ? "0"+date.getDate() : date.getDate();
var dateString = day + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
//====================================================
var holiday = false;
var holidays = [];
$.getJSON(url).then(function (data) {
for(var i = 0; i < data.length; i++){
var obj = {day: data[i].date, name: data[i].name};
holidays[i] = obj;
}
});
for(var i = 0; i < holidays.length; i++){
if(holidays[i].day == dateString){
holiday = true;
break;
}
}
return feriado;
}
答案 1 :(得分:0)
您的代码存在一些问题:
下面是一个简单的示例,用于测试元旦是否是假期:
var req = new XMLHttpRequest();
req.onload = function(e) {
var text = req.response;
var data = JSON.parse(text);
var holidays = data.map(hol => ({day:hol.date, name:hol.name}));
var nyd = '01/01/2018';
console.log(`Is ${nyd} a holiday? ${holidays.some(hol => hol.day == nyd)}`);
}
var url = 'https://api.calendario.com.br/?json=true&ano=2018&estado=SP&cidade=MOGI_GUACU&token=ZGdvLmRpZWdvY2FydmFsaG9AZ21haWwuY29tJmhhc2g9MTYzMjcxMDY3'
req.open('GET', url); // async request
req.responseType = 'text';
req.send();
您只应执行一次请求,并存储结果,因为每次调用 verifyHoliday 时都会运行该结果,效率非常低。假期可能不经常更改(通常提前几年才刊登宪报),因此每天甚至一次就足够了。