AJAX 使用 sabreDAV 调用贝加尔共享日历
AJAX call to baikal shared calendar using sabreDAV
我想弄清楚如何对 baikal 服务器进行 ajax 调用以执行 GET、POST、OPTIONS、PROPFIND、PROPPATCH、REPORT、PUT、MOVE , 删除, 锁定, 解锁
我已经使用了这段代码 here 并使其正常工作,但我想我只是不知道如何进行正确的 ajax 调用。
我在同一域内进行调用以避免 cross-domain 现在出现问题。我以前使用过 CalDavZAP,我可以看到他们使用 ajax 进行调用,但即使查看了他们的代码,我还是无法正常工作。
我试过了
var content = 'BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20171020T123121Z LAST-MODIFIED:20171020T220236Z DTSTAMP:20171020T220236Z UID:m54url1l-6xwy-snnp-rg0h-7yl5kgsfbadg SUMMARY:this is new TRANSP:OPAQUE CLASS:PUBLIC DTSTART;VALUE=DATE:20171025 DTEND;VALUE=DATE:20171026 END:VEVENT PRODID:-//Inf-IT//CalDavZAP 0.13.1//EN END:VCALENDAR';
$.ajax({
type: 'PUT',
url: 'http://cal.domain.ca/cal.php/calendars/user/default/crazychars.ics',
beforeSend: function(req) {
req.setRequestHeader('Prefer', 'return=representation');
req.setRequestHeader('If-None-Match', '*');
},
username:'username',
password:'password',
contentType: 'text/calendar',
processData: true,
data: content,
dataType: 'text',
success: function(data){
console.log(data);
},
error: function(){
console.log(data);
event.preventDefault();
}
});//end of AJAX
在尝试了上面的很多操作后,现在 returns 出现 415(不支持的媒体类型)。我尝试了不同类型的 contentType 和其他 headers,但没有更好的结果。在互联网上搜索后,我不知道还能做什么。贝加尔湖站点没有提供从我看过的地方提交到服务器的示例。
这里有一些request/responseheaders
Response Headers
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-
check=0
Connection:Keep-Alive
Content-Type:application/xml; charset=utf-8
Date:Sat, 21 Oct 2017 11:44:12 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=98
Pragma:no-cache
Server:Apache/2.4.6
Transfer-Encoding:chunked
X-Powered-By:PHP/5.6.31
X-Sabre-Version:3.1.3
Request Headers
Accept:text/plain, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en,fr;q=0.8
Authorization:Basic Z3N0bG91aXM6R3N0bG91aXM3OA==
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:345
Content-Type:text/calendar
Cookie:PHPSESSID=fqc0ctuskfv0cgaqeiq196gtf4; _ga=GA1.2.519255846.1496415686
Host:cal.smbservices.ca
If-None-Match:*
Origin:http://cal.domain.ca
Prefer:return=representation
Referer:http://cal.domain.ca/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
X-Requested-With:XMLHttpRequest
我遇到的问题是我的内容变量。为了以良好的格式进行 ajax 调用,每一行都需要以 \r\n
结束
var content = 'BEGIN:VCALENDAR\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20171020T123121Z\r\nLAST-MODIFIED:20171020T220236Z\r\nDTSTAMP:20171020T220236Z\r\nUID:m54url1l-6xwy-snnp-rg0h-7yl5kgsfbadg\r\nSUMMARY:superman\r\nTRANSP:OPAQUE\r\nCLASS:PUBLIC\r\nDTSTART;VALUE=DATE:20171030\r\nDTEND;VALUE=DATE:20171030\r\nEND:VEVENT\r\nPRODID:-//Inf-IT//CalDavZAP0.13.1//EN\r\nEND:VCALENDAR';
我想弄清楚如何对 baikal 服务器进行 ajax 调用以执行 GET、POST、OPTIONS、PROPFIND、PROPPATCH、REPORT、PUT、MOVE , 删除, 锁定, 解锁
我已经使用了这段代码 here 并使其正常工作,但我想我只是不知道如何进行正确的 ajax 调用。
我在同一域内进行调用以避免 cross-domain 现在出现问题。我以前使用过 CalDavZAP,我可以看到他们使用 ajax 进行调用,但即使查看了他们的代码,我还是无法正常工作。
我试过了
var content = 'BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20171020T123121Z LAST-MODIFIED:20171020T220236Z DTSTAMP:20171020T220236Z UID:m54url1l-6xwy-snnp-rg0h-7yl5kgsfbadg SUMMARY:this is new TRANSP:OPAQUE CLASS:PUBLIC DTSTART;VALUE=DATE:20171025 DTEND;VALUE=DATE:20171026 END:VEVENT PRODID:-//Inf-IT//CalDavZAP 0.13.1//EN END:VCALENDAR';
$.ajax({
type: 'PUT',
url: 'http://cal.domain.ca/cal.php/calendars/user/default/crazychars.ics',
beforeSend: function(req) {
req.setRequestHeader('Prefer', 'return=representation');
req.setRequestHeader('If-None-Match', '*');
},
username:'username',
password:'password',
contentType: 'text/calendar',
processData: true,
data: content,
dataType: 'text',
success: function(data){
console.log(data);
},
error: function(){
console.log(data);
event.preventDefault();
}
});//end of AJAX
在尝试了上面的很多操作后,现在 returns 出现 415(不支持的媒体类型)。我尝试了不同类型的 contentType 和其他 headers,但没有更好的结果。在互联网上搜索后,我不知道还能做什么。贝加尔湖站点没有提供从我看过的地方提交到服务器的示例。
这里有一些request/responseheaders
Response Headers
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-
check=0
Connection:Keep-Alive
Content-Type:application/xml; charset=utf-8
Date:Sat, 21 Oct 2017 11:44:12 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=98
Pragma:no-cache
Server:Apache/2.4.6
Transfer-Encoding:chunked
X-Powered-By:PHP/5.6.31
X-Sabre-Version:3.1.3
Request Headers
Accept:text/plain, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en,fr;q=0.8
Authorization:Basic Z3N0bG91aXM6R3N0bG91aXM3OA==
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:345
Content-Type:text/calendar
Cookie:PHPSESSID=fqc0ctuskfv0cgaqeiq196gtf4; _ga=GA1.2.519255846.1496415686
Host:cal.smbservices.ca
If-None-Match:*
Origin:http://cal.domain.ca
Prefer:return=representation
Referer:http://cal.domain.ca/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
X-Requested-With:XMLHttpRequest
我遇到的问题是我的内容变量。为了以良好的格式进行 ajax 调用,每一行都需要以 \r\n
结束var content = 'BEGIN:VCALENDAR\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20171020T123121Z\r\nLAST-MODIFIED:20171020T220236Z\r\nDTSTAMP:20171020T220236Z\r\nUID:m54url1l-6xwy-snnp-rg0h-7yl5kgsfbadg\r\nSUMMARY:superman\r\nTRANSP:OPAQUE\r\nCLASS:PUBLIC\r\nDTSTART;VALUE=DATE:20171030\r\nDTEND;VALUE=DATE:20171030\r\nEND:VEVENT\r\nPRODID:-//Inf-IT//CalDavZAP0.13.1//EN\r\nEND:VCALENDAR';