2012-06-23 28 views
3

我使用jQuery插件fullcalendar,我试图从答案没有运气其他问题改变这许多不同的方式,这是我的jQuery:jQuery是不是JSON解析响应正确

  $(document).ready(function() { 

    var date = new Date(); 
    var d = date.getDate(); 
    var m = date.getMonth(); 
    var y = date.getFullYear(); 

    $('#calendar').fullCalendar({ 
     theme: true, 

     aspectRatio: 3, 
     height: 1000, 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     editable: true, 
     events: function (start, end, callback) { 
      $.ajax({ 
       type: "POST", 
       url: "Default.aspx/GetEvents", 
       data: "{'userID':" + "'B473795D-306A-4718-804B-2813884D5B48'}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (doc) { 
        var events = []; 
        var obj = $.parseJSON(doc.d); 
        var res = unescape(obj); 
        $(res).find('event').each(function() { 
         events.push({ 
          title: $(this).attr('title'), 
          start: $(this).attr('start') // will be parsed 
         }); 
        }); 
        callback(events); 
       } 
      }); 
     } 
    }); 
}); 

这里是我的回应:

{"d":"[{ \"title\" : \"circleJerk\", \"start\" : \"2012-06-22\" }, { \"title\" : \"BangTheWife\", \"start\" : \"2012-06-15\" , \"end\" : \"2012-06-23\" } ]"} 
+0

什么是'unescape' events选项。我不认为你需要它 – Rab

+0

我试过没有它,只是因为\“ –

+1

然后你不认为你应该在parsejason之前使用它 – Rab

回答

1

你从你的方法GetEvents返回类型为string不是吗?

尝试返回一个List<Event>(或任何您的对象被称为),然后你不需要通过消除JSON字符串的混乱。

$.ajax({ 
    type: "POST", 
    url: "Default.aspx/GetEvents", //return type List<Event> 
    data: "{'userID':" + "'B473795D-306A-4718-804B-2813884D5B48'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (doc) { 
     //doc.d = [Event,Event,Event] (no processing needed) 
     callback(events); 
    } 
}); 

在回答您的意见,与返回类型列表<的>的方法将看起来像:

[{"title": "sometitle", "start": "yourData"},{"title":"someTitle2", "start":"yourStart2"}] 

翻译ASP.NET ASMX的WebMethod DateTime序列化的JavaScript对象Date

DateFromASPNET = function (sNetDate) { 
    if (sNetDate == null) return; 
    var r = /\/Date\(([0-9]+)\)\//i 
    var matches = sNetDate.match(r); 
    if (matches.length == 2) { 
     return new Date(parseInt(matches[1])); 
    } 
    else { 
     return sNetDate; 
    } 
} 
+0

是要将JSON更改为{“event”:{“title”:“..”,“start”:“..”}“event”{... –

+0

当您序列化日期时,一个“陷入”ASMX Web服务是ASP返回一个DateTime属性作为非常不标准'/ Date(UNIXTIMESTAMP)/'格式。所以如果你的'start'属性是'DateTime',你需要在对它做任何事情之前“修复”那个客户端。我将在上面的答案中包含我的'翻译'功能 – BLSully

+0

即时尝试此操作,它*看起来像*它应该工作 –

0

问题是,AJAX是异步的,所以通过传递函数events选项,没有什么g由于AJAX调用而返回。

只需将ajax选项传递给eventsources选项,即可使用内置的AJX插件方法。

从文档:http://arshaw.com/fullcalendar/docs/event_data/events_json_feed/

$('#calendar').fullCalendar({ 
    eventSources: [ 

    // your event source 
    { 
     url: "Default.aspx/GetEvents", 
     contentType: "application/json; charset=utf-8", 
     type: 'POST', 
     data: "{'userID':" + "'B473795D-306A-4718-804B-2813884D5B48'}" 
    } 

] 
}); 

编辑:也可以通过单一事件的Ajax选项对象以每文档