使用json和web2py在Fullcalendar中出错

时间:2012-05-29 03:02:52

标签: json fullcalendar web2py

我在打电话:

events: {
    url: '/CondominioVip/evento/evento_json.json',
    error: function() {
        alert('there was an error while fetching events!');
    }
}

我也尝试添加type: 'POST,但它也没有用。

我的控制器:

def evento_json():
    events= "[{'title':'event1','start':'2010-01-01'},{'title':'event3','start':'2010-01-09 12:30:00','allDay':False}]"
    return events

来自浏览器(http://localhost:8000/CondominioVip/evento/evento_json.json)的测试呼叫:

  

[{'title':'event1','start':'2010-01-01'},{'title':'event3','start':'2010-01-09 12:30:00 ”, '阿迪':假}]

来自web2py ajax函数的请求:

  

接受:application / json,text / javascript, / ; Q = 0.01
  接收字符集:ISO-8859-1,utf-8; Q = 0.7,*; Q = 0.3
  接受编码:gzip,紧缩,SDCH
  接受语言:PT-BR,PT; Q = 0.8,EN-US; Q = 0.6,连接; Q = 0.4
  缓存控制:最大年龄= 0
  连接:保持活跃
  内容长度:31
  内容类型:应用/ X WWW的窗体-urlencoded
  饼干:session_id_admin = 127.0.0.1-f9db7d99-4e7e-4bae-A229-d6614e9599f0; cvip_language = PT-BR; session_id_condominiovip = 127.0.0.1-b820cbe3-9a55-40bb-8618-8d3f9a43f7c2
  主持人:localhost:8000
  起源:http://localhost:8000
  引用者:http://localhost:8000/CondominioVip/evento/index/2
  用户代理:Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 536.5(KHTML,如Gecko)Chrome / 19.0.1084.46 Safari / 536.5
  X-Requested-With:XMLHttpRequest

回复标题:

  

缓存控制:无存储,无缓存,必须重新验证,后检查= 0,预检查= 0   连接:保持活跃
  内容长度:105
  内容类型:应用程序/ JSON
  日期:2012年5月29日星期二02:54:04 GMT
  到期日:2012年5月29日星期二02:54:03 GMT
  附注:无缓存
  服务器:Rocket 1.2.4 Python / 2.7.3
  设置Cookie:cvip_language = PT-BR; expires = Wed,30-May-2012 02:54:04 GMT; Path = /,session_id_condominiovip = 127.0.0.1-b820cbe3-9a55-40bb-8618-8d3f9a43f7c2;路径= /
  X-Powered-By:web2py

响应:

  

[{'title':'event1','start':'2010-01-01'},{'title':'event3','start':'2010-01-09 12:30:00 ”, '阿迪':假}]

我没有选择权。任何帮助都会得到赞赏。

更新

我已在Chrome上安装了JsonView扩展程序,因此返回字符串不会被视为json响应。

我做了一些改变:

def evento_json():
    rows = db(evento.id>0).select(evento.id,evento.titulo,evento.data_hora_inicio,evento.data_hora_fim)
    events = []
    for row in rows:
        event = {'title': row['titulo'],
                 'start': row['data_hora_inicio'],
                 'end': row['data_hora_fim'],
                 'allDay': False,
                 'url': URL(c='evento', f='index', args=[row['id']], extension=False)}
        events.append(event)
    return events

但是web2py会抛出错误。我在将它发送到generic.json之前打印了“events”和“json(events)”,格式正是fullcalendar所期望的。

我发现停止错误的方式是:

在控制器中:

def evento_json():
    import datetime
    start = datetime.datetime.fromtimestamp(int(request.vars['start'])).strftime('%Y-%m-%d %H:%M:%S')
    end = datetime.datetime.fromtimestamp(int(request.vars['end'])).strftime('%Y-%m-%d %H:%M:%S')
    set = db((evento.id>0) &
             (evento.data_hora_inicio >= start) &
             (evento.data_hora_fim <= end))

    if (not auth.has_membership(auth.id_group(role='site_admin'), auth.user.id)) and \
       (not auth.has_membership(auth.id_group(role='cond_admin'), auth.user.id)):
        set = set(evento.flag_disp==True)

    rows = set.select(evento.id,
                      evento.titulo,
                      evento.data_hora_inicio,
                      evento.data_hora_fim,
                      evento.flag_disp)

    events = []
    for row in rows:
        event = {'title': row['titulo'],
                 'start': row['data_hora_inicio'],
                 'end': row['data_hora_fim'],
                 'allDay': False,
                 'url': URL(c='evento', f='index', args=[row['id']], extension=False),
                 'color': 'blue' if row['flag_disp'] is True else 'red'}
        events.append(event)

    if events:
        from gluon.serializers import json
        return XML(json(events))
    else:
        return '{}'

使用以下命令创建视图evento / evento_json.json:

  

{{= response._vars)}}

有效!但对我来说似乎是个错误。我不确定我做错了什么。

1 个答案:

答案 0 :(得分:0)

也许试试:

events= "[{'title':'event1','start':'2010-01-01'},{'title':'event3','start':'2010-01-09T12:30:00Z','allDay':false}]"

(根据API将event3开始日期/时间更改为ISO8601格式,并将“False”更改为“false”。)