我正在创建fullcalendar来创建事件。我从循环开始日期和结束日期得到rest api的值。我的想法是,当那天我没有数据显示事件和空置日,但总是我得到循环日期的结束。请指导我该怎么做以获得增量值。
我确定它有ajax异步问题,因为它正在发生。我只需要帮助
我的代码
var startDate = calendar.fullCalendar('getView').start;
var endDate = calendar.fullCalendar('getView').end;
$.ajax({
url: "/_api/lists/getbytitle('Item')/items?$select=Title,Category&$orderby=Category&$filter=Category eq '" + $("#items").val() + "'",
method: "GET",
headers: { "Accept": "application/json; odata=verbose" }
}).then(function (data) {
var promises = data.d.results.map(function (item, i) {
var _url = "/_api/lists/getbytitle('ItemRequestLog')/items?$select=Title,ItemRequest/Title,DateRequestedFrom,DateRequestedTo&$expand=ItemRequest&$filter=Title eq '" + item.Title + "'";
for (var d = new Date(startDate.format()); d < new Date(endDate.format()); d.setDate(d.getDate() + 1)) {
var e = moment(d).add(1, 'days'); console.log(d) //here value is good
_url += " and (DateRequestedFrom ge datetime'" + d.toISOString() + "') and (DateRequestedTo le datetime'" + e.toISOString() + "')";
$.ajax({
url: _url,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" }
}).then(function (data) {
if (data.d.results.length == 0) {
console.log(d) //here I am getting end of the loop value
event.title = item.Title;
event.start = d;
event.end = e;
event.allDay = true;
event.color = "yellow";
$('#calendar').fullCalendar('renderEvent', event, true);
}
var promises = data.d.results.map(function (itemLog, i) {
event.title = itemLog.Title;
event.start = moment(itemLog.DateRequestedFrom);
event.end = moment(itemLog.DateRequestedTo);
event.allDay = false;
event.color = "red";
$('#calendar').fullCalendar('renderEvent', event, true);
});
})
_url = "/_api/lists/getbytitle('ItemRequestLog')/items?$select=Title,ItemRequest/Title,DateRequestedFrom,DateRequestedTo&$expand=ItemRequest&$filter=Title eq '" + item.Title + "'";
}
});
});
请帮助解决它。
答案 0 :(得分:0)
var
被提升,并且具有函数作用域,而不是块作用域:在异步代码中,如果你使用for循环,请确保使用let
,这样,每次迭代loop将对所讨论的变量有一个单独的绑定。
更改
for (var d = new Date(startDate.format()); d < new Date(endDate.format()); d.setDate(d.getDate() + 1)) {
到
for (let d = new Date(startDate.format()); d < new Date(endDate.format()); d.setDate(d.getDate() + 1)) {