将XMLHttpRequest与Google Calendar API v3 Calendars一起使用:获取请求

时间:2018-01-23 08:17:22

标签: javascript google-api google-calendar-api

我似乎无法让XMLHttpRequst方法与日历一起正常工作:从Google Calendar API获取请求。
 例如,带有“myemail@gmail.com”的calendarId可以正常工作,但如果它包含"en.usa#holiday@group.v.calendar.google.com"之类的“#”字符,则会返回401错误,"#contacts@group.v.calendar.google.com"会返回404错误。
  我假设请求将散列符号注册为片段,其余作为片段标识符?有没有办法解决这个问题,同时仍然使用XMLHttpRequest?

var xhr = new XMLHttpRequest();
xhr.open('GET',
  'https://www.googleapis.com/calendar/v3/calendars/' + calendarId +
  '?access_token=' + accessToken);
xhr.onreadystatechange = function (e) {
  if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
    console.log(xhr.response);
  }
};
xhr.setRequestHeader('responseType', "json");
xhr.setRequestHeader('timeMin', (new Date(today.getFullYear(), 
  today.getMonth(), today.getDate())).toISOString());
xhr.setRequestHeader('showDeleted', false);
xhr.setRequestHeader('singleEvents', true);
xhr.setRequestHeader('maxResults', 30);
xhr.setRequestHeader('orderBy', "startTime");
xhr.send(null);

在chrome检查工具的“网络”标签中,只有“#”之前的请求网址部分与没有#的其他calendarId相比才会被发送。

1 个答案:

答案 0 :(得分:2)

  

我假设请求将散列符号注册为片段,其余的作为片段标识符?

  

在使用XMLHttpRequest的同时还有什么方法吗?

与任何其他工具使用的任何其他网址相同。

不要将数据推送到网址(或任何其他数据格式)而不妥善转义它。

'https://www.googleapis.com/calendar/v3/calendars/' + 
    encodeURIComponent(calendarId) +
   '?access_token=' + 
    encodeURIComponent(accessToken)