gpt4 book ai didi

php - Dhtmlx Scheduler 未在 TimeInterval 中更新

转载 作者:行者123 更新时间:2023-11-29 13:21:36 25 4
gpt4 key购买 nike

我已设置 setInterval 来更新我的调度程序。我正在从服务器获取 JSON 格式的数据。但如果我使用 json 数据,调度程序不会获得更新,但如果我输入静态值,它工作正常。以下是我的代码。

// It doesn't work

setInterval(function() {

$.post('ajax_comet.php',{sectionIds:sectionIds},function (data){
if(data.processing.length>0)
{
for(var i=0;i<data.processing.length;i++)
{
var startdt=data.processing[i].start_interval.split(",");
var endt=data.processing[i].end_interval.split(",");
var month=parseInt(startdt[1])-1;
var start=startdt[0]+","+month+","+startdt[2]+","+startdt[3]+","+startdt[4];
var end=endt[0]+","+month+","+endt[2]+","+endt[3]+","+endt[4];
var section="'"+data.processing[i].section_id+"'";
console.log(start);
console.log(end);
scheduler.addMarkedTimespan({
start_date: new Date(start),
end_date: new Date(end),
css: "inprocess",
sections: {
unit: section
}
});

scheduler.updateView();
}

静态数据的相同时间间隔工作正常。

// This works properly.

setInterval(function() {

$.post('ajax_comet.php',{sectionIds:sectionIds},function (data){
if(data.processing.length>0)
{
for(var i=0;i<data.processing.length;i++)
{
var startdt=data.processing[i].start_interval.split(",");
var endt=data.processing[i].end_interval.split(",");
var month=parseInt(startdt[1])-1;
var start=startdt[0]+","+month+","+startdt[2]+","+startdt[3]+","+startdt[4];
var end=endt[0]+","+month+","+endt[2]+","+endt[3]+","+endt[4];
var section="'"+data.processing[i].section_id+"'";
console.log(start);
console.log(end);
scheduler.addMarkedTimespan({
start_date: new Date(2013,11,29,01,00),
end_date: new Date(2013,11,29,01,30),
css: "inprocess",
sections: {
unit: 'a7b6e635-f62f-6f12-020f-52a959d1ca47'
}
});

scheduler.updateView();
}
}
},'json');

}, 5000);

}
},'json');

}, 5000);

最佳答案

如果它适用于静态数据,则意味着动态数据要么出错,要么在客户端解析错误。

确保日期和部分正确。例如,在此代码中,您从 ajax 值收集日期字符串并在控制台中检查该字符串:

var start=startdt[0]+","+month+","+startdt[2]+","+startdt[3]+","+startdt[4];
var end=endt[0]+","+month+","+endt[2]+","+endt[3]+","+endt[4];

console.log(start);
console.log(end);

如果您检查传递给调度程序 API 的结果日期,将会提供更多信息。

console.log(new Date(start));
console.log(new Date(end));

日期字符串可能有一些不明显的错误,导致日期对象无效。

其次,收集日期的代码相当复杂。我建议使用更简单的格式从服务器传输日期(例如使用 unix 时间戳),或者定义一些辅助函数来解析它们。

仅供引用,调度程序库包括 scheduler.date定义处理日期的方法的对象。所以你可以像下面这样定义解析函数。这使得拼写错误和意外错误的空间大大减少。不太确定我是否指定了正确的 date format ,但如果有必要您可以更改它

var parseDate = scheduler.date.str_to_date("%Y, %m, %d, %H, %i");

var start = parseDate(data.processing[i].start_interval),
end = parseDate(data.processing[i].end_interval);

有一个特别可疑的行是您检索该部分 id 的位置:

var section="'"+data.processing[i].section_id+"'";

我认为您在此处向部分 ID 添加了额外的引号。我的意思是varsection将等于"'a7b6e635-f62f-6f12-020f-52a959d1ca47'" ,而在静态代码中使用 "a7b6e635-f62f-6f12-020f-52a959d1ca47" - 不带额外的引号

还有一件事。每次添加时间跨度时,您都会调用 scheduler.updateView() 。由于此命令会触发日历的完全重绘,因此最好在循环完成时仅调用一次。

更新:

这是代码示例。实际上并没有运行它,但我希望它能澄清上面的文字

setInterval(function() {
var parseDate = scheduler.date.str_to_date("%Y, %m, %d, %H, %i");// parse string of specified format into date object

$.post('ajax_comet.php',{sectionIds:sectionIds},function (data){
if(data.processing.length>0)
{
for(var i=0;i<data.processing.length;i++)
{
var timespan = data.processing[i];

var start = parseDate(timespan.start_interval),
end = parseDate(timespan.end_interval),
section = timespan.section_id;

console.log(start);
console.log(end);
scheduler.addMarkedTimespan({
start_date: start,
end_date: end,
css: "inprocess",
sections: {
unit: section
}
});
}
//update calendar after loop is finished
scheduler.updateView();
}
},'json');

}, 5000);

关于php - Dhtmlx Scheduler 未在 TimeInterval 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com