Fullcalendar 4.x-添加标头“ X-Requested-With:XMLHttpRequest”

时间:2019-11-04 20:48:30

标签: fullcalendar fullcalendar-4

使用Fullcalendar 4.x,是否可以在获取事件时添加“ X-Requested-With:XMLHttpRequest”标头?

我以这种方式设置事件源:

calendar.addEventSource({ url: ev_url, id: 'default' });

一切正常,请求已正确发送,但是我提到的标头丢失了(在服务器端,我们要求该标头存在)。

我尝试将以下内容添加到addEventSource:

beforeSend: function (xhr) {
  xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
}

我尝试的另一件事是将其添加到js文件中(由于Fullcalendar 4不再使用jquery了,所以可能毫无意义吗?):

$.ajaxSetup({
  beforeSend: function (xhr) {
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  }
});

不幸的是,这两种解决方案都不起作用。

过去,使用fullcalendar 3.x时,请求事件时会出现该标头。我猜那是因为JQuery是自动添加它的。

1 个答案:

答案 0 :(得分:0)

我也在寻找答案。我修改了FullCalendar main.js文件,该文件虽然不理想,但却可以解决问题!

我在4242行附近修改了文件@,以下是该函数的完整源代码:

 /*! FullCalendar Core Package v4.3.1

    function requestJson(method, url, params, successCallback, failureCallback) {
    method = method.toUpperCase();

    // Set Headers From Params to own varaible
    var headers;
    if(params.hasOwnProperty('headers') && Array.isArray(params.headers)){
      headers = params.headers;
      // Remove them from the params object
      delete params.headers;
    }

    var body = null;
    if (method === 'GET') {
        url = injectQueryStringParams(url, params);
    }
    else {
        body = encodeParams(params);
    }
    var xhr = new XMLHttpRequest();
    xhr.open(method, url, true);        

    // Create Headers If Avaiable
    if(typeof headers !== "undefined"){
        for(var key in headers){
          if (!headers.hasOwnProperty(key)) continue;
            var obj = headers[key];
            for(var prop in obj){
                if (!obj.hasOwnProperty(prop)) continue;
                xhr.setRequestHeader(prop, obj[prop]);
            }
        }           
    }

    if (method !== 'GET') {
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    }

    xhr.onload = function () {
        if (xhr.status >= 200 && xhr.status < 400) {
            try {
                var res = JSON.parse(xhr.responseText);
                successCallback(res, xhr);
            }
            catch (err) {
                failureCallback('Failure parsing JSON', xhr);
            }
        }
        else {
            failureCallback('Request failed', xhr);
        }
    };
    xhr.onerror = function () {
        failureCallback('Request failed', xhr);
    };
    xhr.send(body);
}

要使用它,我只需向extraParams对象添加标头键,如下所示:

extraParams = {
        action: 'get_event',
        headers: [
            {"X-Requested-With":"XMLHttpRequest"}
        ]
}; 

这样,您可以根据需要添加任意数量的额外标题。