2015-04-18 158 views
3

我是JavaScript,JQuery和Google API的新手,因此对这个问题的回答可能是一个非常简单的事情,我忽略了这一点。我已经检查了本网站上所有可用的Google Calendar Freebusy问题,但我无法设法让他们的答案以任何方式适合我的代码。

我正在尝试为检查公共日历的freebusy查询的html页面编写脚本。谷歌表示,HTTP请求应

POST https://www.googleapis.com/calendar/v3/freeBusy 

{ 
    "timeMin": datetime, 
    "timeMax": datetime, 
    "timeZone": string, 
    "groupExpansionMax": integer, 
    "calendarExpansionMax": integer, 
    "items": [ 
    { 
     "id": string 
    } 
    ] 
} 

我现在的HTML页面包含了最新的jQuery库的请求的身体,我在写剧本。调用页面上的脚本会导致Failed to load resource: the server responded with a status of 400 (Bad Request)错误。进一步深入到错误的信息将返回"This API does not support parsing form-encoded input."

我的脚本语法错误,看起来像这样:

(function ($) { 
    $.GoogleCalendarFreebusy = function (options) { 
    var defaults = { 
     apiKey: '[projectkey]', 
     getID: '[id]@group.calendar.google.com', 
     element: '#div' 
    }; 

    options = $.extend(defaults, options); 

    $.post('https://www.googleapis.com/calendar/v3/freeBusy?key=' + options.apiKey, 
      {"items":[{"id": getID }],"timeMin":"2015-04-10T14:15:00.000Z","timeMax":"2015-04-20T23:30:00.000Z"}, "null", "json")  
    .done(function(data) { 
     loaded(data); 
     }); 

    function loaded(data) { 
     var status = data.calendars[getID].busy; 

     console.log(status); 

     if(status.length !== 0) { 

     for(var i = 0; i < status.length; i++) { 
     var statusEntry = status[i]; 
     var startTime = statusEntry.start; 
     var endTime = statusEntry.end; 
     } 

     var now = new Date().toISOString(); 
     var element = options.element ; 
     var name = element.substr(1); 

     if (now > startTime && now < endTime){ 

      $(options.element).append('Available!'); 

     } 

     else { 

      $(options.element).append('Unavailable!'); 

      } 

    } else { 

    $(options.element).append('Unavailable!'); 

    } 

    } 

    }; 
})(jQuery); 

我的请求被接受的Google Explorer "Try It"适当的反应,所以我认为这可能是JavaScript错误/ JSON请求我忽略了?预先感谢您的帮助和建议。

+0

您正在查看的日历是公开的吗?否则,您将需要进行身份验证。 – luc

+0

日历设置为公开[仅共享我的空闲/忙碌信息]。随着日历设置更改为纯粹公开,我仍然收到400错误的请求错误。 – Akai

+0

尝试在此附加引号:{“items”:[{“id”:“[id] @ group.calendar.google.com”}],“timeMin”:“2015-04-10T14:15:00.000Z “,”timeMax“:”2015-04-20T23:30:00.000Z“} – luc

回答

2

Google Calendar API Post请求需要将指定为JSON的内容类型以避免上述错误。将POST作为带有指定contentType的AJAX请求处理可解决此错误。

$.ajax({ 
    url: 'https://www.googleapis.com/calendar/v3/freeBusy?key=' + options.apiKey, 
    type: 'POST', 
    data: '{"items":[{"id": "[id]@group.calendar.google.com"}], "timeMin": "2015-04-10T14:15:00.000Z", "timeMax": "2015-04-20T23:30:00.000Z"}', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: 'null' 
}) 

谢谢您的建议!