Fullcalendar 4.x-添加标题“;X-request-With:XMLHttpRequest“;

Fullcalendar 4.x-添加标题“;X-request-With:XMLHttpRequest“;,fullcalendar,fullcalendar-4,Fullcalendar,Fullcalendar 4,使用Fullcalendar 4.x,在获取事件时是否可以添加“x-request-With:XMLHttpRequest”头 我正在以以下方式设置事件源: calendar.addEventSource({ url: ev_url, id: 'default' }); 一切正常,请求发送正确,但缺少我提到的头(在服务器端,我们要求该头存在) 我尝试将以下内容添加到addEventSource: beforeSend: function (xhr) { xhr.setRequestHead

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

我正在以以下方式设置事件源:

calendar.addEventSource({ url: ev_url, id: 'default' });
一切正常,请求发送正确,但缺少我提到的头(在服务器端,我们要求该头存在)

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

beforeSend: function (xhr) {
  xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
}
我尝试的另一件事是将其添加到js文件中(可能没有意义,因为Fullcalendar 4不再使用jquery了?)

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


在过去使用fullcalendar 3.x时,请求事件时会出现该标题。我想这是因为JQuery是自动添加的。

我也在寻找答案。我修改了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);
}

通过这种方式,您可以根据需要添加任意多的额外头。

如果仅使用URL作为事件源,则无法通过API指定头。我认为您必须实现events-as-a-function模式,并自己处理AJAX代码。
 /*! 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 = {
        action: 'get_event',
        headers: [
            {"X-Requested-With":"XMLHttpRequest"}
        ]
};