3

私は jQuery fullcalendar プラグインを使用しています。これをさまざまな方法で他の質問への回答から変更しようとしましたが、うまくいきませんでした。これが私の jQuery です。

         $(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\" } ]"}
4

2 に答える 2

1

メソッドからの戻り値の型はそうでGetEventsstringありませんか?

a 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);
    }
});

あなたのコメントに応えて、戻り値の型が List<> のメソッドは次のようになります。

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

ASP.NET ASMX webmethodDateTimeシリアル化を JavaScriptDateオブジェクトに変換する:

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;
    }
}
于 2012-06-23T02:52:30.483 に答える
0

問題は、AJAX が非同期であるため、関数をeventsオプションに渡すことによって、AJAX 呼び出しのために何も返されないことです。

オプションに ajax オプションを渡すだけで、プラグインの組み込みの AJX メソッドを使用 eventsourcesできます。

ドキュメントから: 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'}"
    }

 ]
});

events編集:ドキュメントごとに単一のイベント ソース ajax オプション オブジェクトをオプションに渡すこともできます

于 2012-06-23T02:59:48.793 に答える