Javascript 函数用于捕获在某些情况下不工作的正确天数
我希望这个问题有意义。我的javascript相当弱。然而,我有一个脚本,用于通过apikey从我们的gyms软件中提取信息。基本上,每天晚上7点,如果训练已经发布,我想让脚本抓取它。如果是晚上7点之前或之后,而明天的训练不可用,只需保留前几天的训练 脚本似乎在大部分时间都能正常工作,但在中午之前就会出现问题。例如,今天上午10:45,脚本本应捕获2017年1月21日的训练,但出于某种原因,它遇到了错误代码条款,并将训练从2017年1月20日开始 很抱歉出现了文字墙,但基本上是希望有人能告诉我我的脚本中有什么/如果有问题。我认为问题所在的领域从“今天=新日期()开始” 多谢各位Javascript 函数用于捕获在某些情况下不工作的正确天数,javascript,Javascript,我希望这个问题有意义。我的javascript相当弱。然而,我有一个脚本,用于通过apikey从我们的gyms软件中提取信息。基本上,每天晚上7点,如果训练已经发布,我想让脚本抓取它。如果是晚上7点之前或之后,而明天的训练不可用,只需保留前几天的训练 脚本似乎在大部分时间都能正常工作,但在中午之前就会出现问题。例如,今天上午10:45,脚本本应捕获2017年1月21日的训练,但出于某种原因,它遇到了错误代码条款,并将训练从2017年1月20日开始 很抱歉出现了文字墙,但基本上是希望有人能告诉我我
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
function loadFormattedWOD(selector, apiKey, date, location, program) {
$.ajax({
url: 'https://app.wodify.com/API/WODs_v1.aspx',
data: {
apiKey: apiKey,
date: date,
location: location,
program: program,
type: "json"
},
dataType: "json",
success: function(data){
try {
if(data && data.RecordList.APIWod.FormattedWOD) {
$(selector).html(data.RecordList.APIWod.FormattedWOD);
return "worked";
}
} catch(err) {
return null;
}
}
});
}
function loadFormattedWOD2(selector, apiKey, date, location, program) {
$.ajax({
url: 'https://app.wodify.com/API/WODs_v1.aspx',
data: {
apiKey: apiKey,
date: date,
location: location,
program: program,
type: "json"
},
dataType: "json",
success: function(data){
if(data && data.RecordList.APIWod.FormattedWOD) {
$(selector).html(data.RecordList.APIWod.FormattedWOD);
}
}
});
}
today = new Date()
if (today.getHours() >=19) {today.setDate(today.getDate()+1);}
else {today.setDate(today.getDate()+0);}
var dateString = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
if(loadFormattedWOD("#wodbody", "myapikey", dateString, "My Crossfit", "CrossFit") == null) {
retryWithToday();
}
function retryWithToday() {
today.setDate(today.getDate() - 1);
var dateString = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
loadFormattedWOD2("#wodbody", "myapikey", dateString, "My Crossfit", "CrossFit");
}
</script>
<div id="wodbody" />
函数loadFormattedWOD(选择器、apiKey、日期、位置、程序){
$.ajax({
网址:'https://app.wodify.com/API/WODs_v1.aspx',
数据:{
阿皮基:阿皮基,
日期:日期:,
地点:地点,,
节目:节目,,
类型:“json”
},
数据类型:“json”,
成功:功能(数据){
试一试{
if(data&&data.RecordList.APIWod.FormattedWOD){
$(选择器).html(data.RecordList.APIWod.FormattedWOD);
返回“已工作”;
}
}捕捉(错误){
返回null;
}
}
});
}
函数loadFormattedWOD2(选择器、apiKey、日期、位置、程序){
$.ajax({
网址:'https://app.wodify.com/API/WODs_v1.aspx',
数据:{
阿皮基:阿皮基,
日期:日期:,
地点:地点,,
节目:节目,,
类型:“json”
},
数据类型:“json”,
成功:函数(数据){
if(data&&data.RecordList.APIWod.FormattedWOD){
$(选择器).html(data.RecordList.APIWod.FormattedWOD);
}
}
});
}
今天=新日期()
如果(today.getHours()>=19){today.setDate(today.getDate()+1);}
else{today.setDate(today.getDate()+0);}
var dateString=today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
if(loadFormattedWOD(“#wodbody”、“myapikey”、日期字符串、“我的交叉拟合”、“交叉拟合”)==null){
今天复述();
}
函数retryWithToday(){
today.setDate(today.getDate()-1);
var dateString=today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
loadFormattedWOD2(“#wodbody”、“myapikey”、日期字符串、“我的交叉拟合”、“交叉拟合”);
}
$.ajax()
是异步的,这意味着您的返回“已工作”loadFormattedWOD()
实际上并没有返回code>。要解决此问题,请使用retryWithToday
作为对loadFormattedWOD()
的回调:
根据[这个答案](,获取明天日期的正确方法是a=newdate((newdate())。valueOf()+1000*3600*24)
。这将阻止日期,例如每月的第32天。谢谢你,这在看到你的迭代后是有意义的,比我试图完成的要干净得多。非常感谢。我还将调整我的日期参数,以避免任何冲突。
function loadFormattedWOD(selector, apiKey, date, location, program, callback) {
$.ajax({
...
success: function(data){
try {
if (data && data.RecordList.APIWod.FormattedWOD) {
$(selector).html(data.RecordList.APIWod.FormattedWOD);
console.log('worked');
}
} catch(err) {
if (callback) callback();
}
}
});
}
...
loadFormattedWOD("#wodbody", "myapikey", dateString, "My Crossfit", "CrossFit", retryWithToday);
function retryWithToday() {
today.setDate(today.getDate() - 1);
var dateString = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
loadFormattedWOD("#wodbody", "myapikey", dateString, "My Crossfit", "CrossFit");
}