你可以在jQuery FullCalendar中延迟AJAX请求(月份更改)吗?

时间:2012-04-01 23:58:38

标签: jquery ajax fullcalendar

我使用jquery fullcalendar效果很好。我遇到的一个问题是,如果你单击向前或向后快速移动几个月,它仍然会尝试触发多个ajax请求,它不会等到你确实在那个月“安顿下来”。

我基本上希望它在发出ajax事件之前等待1秒,以确保用户不会再次点击下一步。

这可以在jquery完整日历中使用吗?我原本以为有这样的跟随和其他高级功能的插件会有这个

3 个答案:

答案 0 :(得分:2)

JQuery有一系列Ajax事件处理程序,如ajaxSendajaxPrefilterajaxStart

使用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;
});

答案 1 :(得分:-1)

你能尝试编辑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查询”。

答案 2 :(得分:-1)

我想我明白了,基本上把一个计时器放在事件回调中并从那里踩油门。

我想做这样的事情:

 events: function (start, end, callback) {

        if (timer) {
            clearTimeout(timer);
        }

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

    }