В настоящее время внутри вашего обработчика событий dayClick у вас есть код для добавления всех других обработчиков событий, а также определены некоторые функции.Это не очень хорошая вещь, потому что это означает, что каждый раз, когда пользователь нажимает на день, этот код будет запускаться и будет добавлять все больше и больше обработчиков событий на вашу страницу.Добавление обработчика событий не перезаписывает ранее добавленные обработчики, оно просто добавляет больше.Затем каждый раз, когда событие, к которому вы добавляете обработчик, запускается, он одновременно выполняет все обработчики событий, прикрепленные к нему.
Это объясняет, почему иногда вы видите, что ваши вызовы ajax запускаются снова и снова - это будет в тех случаях, когда вы нажимали на день (или разные дни) уже более одного раза.
Вам необходимо убедиться, что код обработки событий запускается только один раз , а ваши функции объявляются только один раз.Для этого переместите весь этот код за пределы конфигурации календаря.Затем вам также необходимо разрешить передачу некоторых параметров в функцию fetch_data, чтобы она знала, что нужно извлечь, не полагаясь на область закрытия:
Итак, в вашем коде fullCalendar:
dayClick: function(start, end, event) {
fetch_data(start, end);
}
Вот и все, это все, что вам нужно внутри конфигурации календаря.
Затем за пределами вашей конфигурации календаря:
function fetch_data(start, end) {
var st = start.format('YYYY-MM-DD HH:mm:ss');
var en = start.format('YYYY-MM-DD HH:mm:ss');
$.ajax({
url: "view-data.php",
data: 'action=view&start=' + st + '&end=' + en,
method: "POST",
success: function(data) {
$('#view-me').html(data);
$('#view-data').modal('show');
}
});
}
$(document).on('click', '.add-me', function() {
$('#start').val(moment($(this).data('start')).format('YYYY-MM-DD[T]HH:mm:ss'));
$('#end').val(moment($(this).data('end')).format('YYYY-MM-DD[T]HH:mm:ss'));
$('#ModalAdd').modal('show');
});
$(document).on("submit", '#myFormAdd', function(e) { // add event submit
e.preventDefault();
doAdd(); // send to form submit function
});
function doAdd() { // add event
var title = $('#title').val();
var start = $('#start').val();
var end = $('#end').val();
$.ajax({
url: 'addEvent.php',
data: 'action=add&title=' + title + '&start=' + start + '&end=' + end,
type: "POST",
success: function(json) {
$('#ModalAdd').modal('hide');
//fetch_data(); //it's not clear why you would need to do this here, since you've just hidden the modal which is populates! Pretty sure you don't need it, so I've commented it out
calendar.fullCalendar('refetchEvents');
}
});
}