【问题标题】:FullCalendar json errorFullCalendar json错误
【发布时间】:2011-10-20 14:07:45
【问题描述】:

我已经尝试了一天多的时间来解决这个问题。我安装了 FullCalendar (v1.5.1),我正在使用 AgendaWeek。我安装了 asp.net v.3.5,我正在尝试使用 Json 提要中的事件填充日历,但它不起作用。这是我的代码和错误。如果有人可以提供帮助,那就太好了。

 <script type="text/javascript">

    $(document).ready(function() {

        //$(".myClass").css("border", "3px solid red");


        /* initialize the Web Service  
        -----------------------------------------------------------------*/
        $(".external-events").empty();
        $.ajax({
            type: "POST",
            async: false,
            contentType: "application/json; charset=utf-8",
            url: "StudiesWebService.asmx/Return_Available_Codes",
            data: "{}",
            dataType: "json",
            success: function(data) {

                var c = eval(data.d);

                for (var i in c) {
                    $(".external-events").append(c[i]);
                };

            },
            error: function(e) { $(".external-events").html("An Error Occured" + e); }
        });

        /* end of web service call
        -----------------------------------------------------------------*/



        /* initialize the external events
        -----------------------------------------------------------------*/

        $('#external-events div.external-event').each(function() {

            // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
            // it doesn't need to have a start or end
            var eventObject = {
                title: $.trim($(this).text()) // use the element's text as the event title
            };

            // store the Event Object in the DOM element so we can get to it later
            $(this).data('eventObject', eventObject);

            // make the event draggable using jQuery UI
            $(this).draggable({
                zIndex: 999,
                revert: true,      // will cause the event to go back to its
                revertDuration: 0  //  original position after the drag
            });

        });

        /* end of initialize the external events
        -----------------------------------------------------------------*/



        /* initialize the calendar
        -----------------------------------------------------------------*/

        $('#calendar').fullCalendar({
            header: {
                left: '',
                center: '',
                right: ''

            },
            eventSources: [

            // your event source
    {
    url: 'StudiesWebService.asmx/EventList',
    type: 'POST',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    error: function() {
        alert('there was an error while fetching events!');
    },
    color: 'yellow',   // a non-ajax option
    textColor: 'black' // a non-ajax option
}

            // any other sources...

     ],
            date: 17, //starting date.
            contentHeight: 780, //height of the calendar
            defaultEventMinutes: 60, //each droppable event is set to 60 min.
            slotMinutes: 15, //slot time interval
            defaultView: 'agendaWeek', //view to agenda week
            minTime: 6, //start time
            maxTime: 21, //end time
            allDaySlot: true,
            editable: true,
            droppable: true, // this allows things to be dropped onto the calendar !!!
            drop: function(date, allDay) { // this function is called when something is dropped


                // retrieve the dropped element's stored Event Object
                var originalEventObject = $(this).data('eventObject');

                // we need to copy it, so that multiple events don't have a reference to the same object
                var copiedEventObject = $.extend({}, originalEventObject);

                // assign it the date that was reported
                copiedEventObject.start = date;
                copiedEventObject.allDay = allDay;

                // render the event on the calendar
                // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
                $('#calendar').fullCalendar('renderEvent', copiedEventObject, true);

                // is the "remove after drop" checkbox checked?
                if ($('#drop-remove').is(':checked')) {
                    // if so, remove the element from the "Draggable Events" list
                    $(this).remove();
                }

            }

        });

        //End of Calendar

    });

</script>

网络服务:

 [WebMethod]
[ScriptMethod]
public string EventList(double start, double end)
{
     var list = new List<string>();
     list.Add("[{\"id\":\"36\"title\":\"Birthday party\",\"start\":\"2011-10-18 07:30\",\"end\":\"2011-10-18 10:30\",\"allDay\":false}]");

    JavaScriptSerializer jss = new JavaScriptSerializer();
    string strJSON = jss.Serialize(list.ToArray());
    return strJSON;




}

Firebug 数据和错误

标题:

响应标头view source 日期 2011 年 10 月 20 日星期四 13:56:52 GMT 服务器 Microsoft-IIS/6.0 MicrosoftOfficeWebServer 5.0_Pub X-Powered-由 ASP.NET X-AspNet-版本 2.0.50727 json错误为真 缓存控制私有 内容类型应用程序/json;字符集=utf-8 内容长度 1063 请求标头view source 主机连接 用户代理 Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 接受 application/json, text/javascript, /; q=0.01 Accept-Language en-us,en;q=0.5 接受编码 gzip,放气 接受字符集 ISO-8859-1,utf-8;q=0.7,*;q=0.7 连接保持活动 内容类型应用程序/json;字符集=utf-8 X-Requested-With XMLHttpRequest 推荐人http://anessrv/fullcalendar/default6.aspx 内容长度 31 杂注无缓存 Cache-Control no-cache

帖子:

来源 开始=1318737600&结束=1319342400

回复:

{"Message":"Invalid JSON primitive: start.","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer .DeserializeInternal(Int32 深度)\r\n 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串输入,Int32 depthLimit,JavaScriptSerializer 序列化程序)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化程序、字符串输入、类型类型、Int32 depthLimit)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](字符串输入)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest (HttpContext 上下文,JavaScriptSerializer 序列化程序)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData 方法数据,HttpContext 上下文)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext 上下文, WebServiceM ethodData methodData)","ExceptionType":"System.ArgumentException"}

【问题讨论】:

    标签: json asmx fullcalendar


    【解决方案1】:

    尝试使用匿名对象语法。我总是直接发现 JSON 字符串是许多错误的根源。我现在不在我的工作计算机上进行测试,但是这样的事情肯定会毫无错误地序列化为 JSON,我只是围绕它构建了一个完整的完整日历项目。 :)

    [WebMethod]
    [ScriptMethod]
    public string EventList(double start, double end)
    {
        List<object> eventList = new List();
    
        eventList.Add(
            new {
                id = 36,
                title = "Birthday party",
                start = "2011-10-18 07:30",
                end = "2011-10-18 10:30",
                allDay = "false"
            }
        );
    
        JavaScriptSerializer jss = new JavaScriptSerializer();
        string strJSON = jss.Serialize(eventList);
        return strJSON;
    }
    

    【讨论】:

      【解决方案2】:

      这看起来不像是对我的问题展示的答案。导致异常的问题是 ASP.NET Web 服务正在查看 contentType 并尝试相应地解析完整日历的“开始”和“结束”参数......然后因为它们无效而出现错误。这就是它的意思: “无效的 JSON 原语:开始。”

      这两个参数中的第一个令人讨厌。 C# 是您的第二个问题,但除非 ASP.NET 可以传递传入请求,否则您将无法解决它。

      (1) 要解决问题中的问题,您需要this 之类的东西,它描述了您需要对 FullCalendar JS 执行的几个简单的技巧。第一个为 jQuery Ajax 正确格式化 data 参数:

      JSON.stringify(data)
      

      除此之外,仅此而已,将帮助您克服问题中的错误并允许您的 C# 运行。

      (2) 此时上述答案的 C# 应该运行,尽管有很多更简洁的方法可以给猫剥皮。但您仍然不会在日历上看到您的活动。

      (3) 那是因为您使用的是 ASP.NET,因此您需要以不同于当前版本的 fullcalendar 的方式解析 JSON 响应。假设您在“事件”中有一系列事件,但实际上您在 events.d 中有一些 JSON。在调试器中查看一下。所以你需要的是(其实不是1中显示的,可能已经过时了),但是:

      events = $.parseJSON(events.d);
      

      然后一切都应该到位。因此,运行它需要三个修复。我知道这一点,因为我刚刚做到了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        • 1970-01-01
        • 2017-09-19
        • 2013-07-14
        相关资源
        最近更新 更多