Можете ли вы отложить запросы AJAX (для смены месяца) в jQuery FullCalendar? - PullRequest
5 голосов
/ 02 апреля 2012

Я использую jquery fullcalendar , который прекрасно работает. У меня есть одна проблема: если вы нажимаете вперед или назад, чтобы быстро перемещаться по нескольким месяцам, он по-прежнему пытается выполнить несколько запросов ajax и не ждет, когда вы действительно «остановитесь» в этом месяце.

Я в основном хочу, чтобы он подождал 1 секунду, прежде чем он запустит событие ajax, чтобы убедиться, что пользователь не собирается нажимать кнопку "Далее".

Возможно ли это в полном календаре jquery? Я бы подумал, что плагин с такими следующими и другими расширенными функциями будет иметь это

Ответы [ 3 ]

2 голосов
/ 04 апреля 2012

JQuery имеет целый ряд обработчиков событий Ajax, таких как ajaxSend , ajaxPrefilter и ajaxStart .

Используя метод ajaxPrefilter (), который вывозможно, перехватит запрос Ajax до его отправки, отложит его, и если событие щелчка на кнопках навигатора месяца не будет обнаружено в течение периода времени, отправьте запрос, в противном случае отмените его.

Это немного надуманноепример, но что-то вроде этого может быть близко к тому, что вы хотите:

var enableRequest = true;

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
  // Modify options, control originalOptions, store jqXHR, etc

    if (!enableRequest ){
        jqXHR.abort();
    }
});

$('span.fc-button-prev, span.fc-button-next').click(function(){
    enableRequest = false;
    setTimeout("setEnabled()", 2000)
});


function setEnabled()
{
    enableRequest = true;
});
0 голосов
/ 04 апреля 2012

Я думаю, я понял, в основном, поместив таймер в события, перезвоните и отрегулируйте оттуда.

Я думал сделать что-то вроде этого:

 events: function (start, end, callback) {

        if (timer) {
            clearTimeout(timer);
        }

        timer = setTimeout(function () {
            put loadMonthData call here;
            callback here();
        }, 1000);

    }
0 голосов
/ 04 апреля 2012

Не могли бы вы попробовать отредактировать fullcalendar.js?

~ строка 114

var fc = $.fullCalendar = { version: "1.5.3" };
var fcViews = fc.views = {};
var ajax = null; // Add this line

~ строка 978

pushLoading();
if (ajax) // add this line
    ajax.abort(); // add this line
    ajax = $.ajax($.extend({}, ajaxDefaults, source, { // CHange this line
                data: data,
                success: function(events) {
                    ajax = null; // Add this line
                    events = events || [];
                    var res = applyAll(success, this, arguments);
                    if ($.isArray(res)) {
                        events = res;
                    }
                    callback(events);
                },

Таким образом, это должно остановить любой "двойной запрос ajax", я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...