Fullcalendar 4.x-添加标题“;X-request-With:XMLHttpRequest“;
使用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
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"}
]
};