Fullcalendar Event drop and ajax



我目前正在使用伟大的Jquery插件Fullcalendar,但遇到了一个问题。我使用eventDrop侦听器,并希望使用Ajax将事件信息发送到服务器端。

我的代码如下:

eventDrop: function (event, dayDelta) {
                $.ajax({
                    url: ("/PSAdmin/RFCalendar/DragEvent"),
                    data: ({
                        type: event.className,
                        delta: dayDelta,
                        newDate: event.start,
                        newTitle: event.title
                    }),
                    type: "POST",
                    success: function (data) {
                        $('#calendar').empty();
                        loadCalendar();
                    },
                    error: function (xhr, status, error) {
                        alert("fail");
                    }
                });
}

我的问题是,一旦我尝试发送事件对象中包含的任何变量,它就不起作用。例如,只向服务器端发送dayDelta有效,但event.something都无效。

如果以前有人偶然发现这个问题,或者你知道是什么原因导致了这个问题,请告诉我。

所以很不幸,我不明白为什么ajax查询不能正常工作,我不得不做我最初不想做的事情。

if (event.className == "holiday") {
                    var className = "holiday";
                }
                //build date
                var date = event.start.getMonth()+1 + "/" + event.start.getDate() + "/" + event.start.getFullYear();
                alert(date);
                $.ajax({
                    url: ("/PSAdmin/RFCalendar/DragEvent/"),
                    data: ({
                        className: className,
                        delta: dayDelta,
                        newDate: date,
                        newTitle: event.title
                    }),
                    type: "POST",
                    success: function (data) {
                        $('#calendar').empty();
                        loadCalendar();
                    },
                    error: function (xhr, status, error) {
                        alert("fail");
                    }
                });

它很难看,也很耗时,但至少它有效。我还有其他优先事项要做,但如果你对这个问题有任何线索,请告诉我。

谢谢,Greg

答案很晚,但我遇到了一个类似的问题,没有任何信息发送到服务器。尝试了一切,缓存以及使用jquery来扩展和复制对象。

对我来说,有效的方法是查看请求的标题。他们似乎总是掌握数据。

我最终得到了这个代码服务器端。这不是我想要的,但它可能会帮助试图解决同样问题的人!

C#

[HttpGet]
    public void UpdateOrderData(object orderObj)
    {
        var obj = new
        {
            start = System.Web.HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["orderObj[start]"]),
            end = System.Web.HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["orderObj[end]"]),
            date = System.Web.HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["orderObj[date]"]),
            resourceId = System.Web.HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["orderObj[resourceId]"]),
            orderId = System.Web.HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["orderObj[orderId]"]),
        };
        calendarUnitOfWork.CustomDataRepository.UpdateOrderData(obj);
    }

Javascript

 myModel.eventDrop = function(event, delta, revertFunc, jsEvent, ui, view ) 
 {
     calUOW.orderrepository.updateOrderData({
            start: event.start.format(),
            end: event.end.format(),
            date: event.start.format("YYYY-MM-DD"),
            resourceId: event.resourceId,
            orderId: event.orderId
        });
  }

我今天遇到了同样的问题。这是我为eventDrop编写的函数。您可以在标签中或使用fullcalendar init函数的任何位置将JS代码添加到页面中。希望能有所帮助。

Javascript:

       eventDrop: function(event) {
          console.log(event.event);
                $.ajax({
                    type: "POST",
                    headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
                    },
                    url: "YOUR POST URL HERE",
                    data: {
                        id: event.event._def.publicId, // Event id for DB
                        start:event.event.startStr,  // Event start timestamp
                        end:event.event.endStr, // Event end timestamp
                        allDay:event.event.allDay // Event allDay Boolean
                    },
                    success: function(response){
                       console.log('success')
                    }
                });
            },

我的小型应用程序使用Laravel 9。这里有一个PHP函数,我用它来编辑完整的日历事件。

PHP函数:

    public function drop_json_appointments(Request $request)
    {
    $app = Appointment::where('id', $request->input('id'))->first();
    $start = Carbon::parse($request->input('start'))->format('Y-m-d H:i:s');
    $end = Carbon::parse($request->input('end'))->format('Y-m-d H:i:s');
    if($request->input('allDay') == 'false') $allDay = 0; else $allDay =1;
    Appointment::where('id', $request->input('id'))->update([
        'start'=>$start,
        'end'=>$end,
        'allDay'=>$allDay,
    ]);
    return response()->json('success');
    }

此外,您应该添加";"调整大小事件";的完整日历。这是调整大小的功能。PHP函数是相同的。

调整事件大小Javascript:

 eventResize: function(event) {
                $.ajax({
                    type: "POST",
                    headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    },
                    url: "SAME AJAX URL",
                    data: {
                        id: event.event._def.publicId,
                        start:event.event.startStr,
                        end:event.event.endStr,
                        allDay:event.event.allDay
                    },
                    success: function(response){
                        console.log('success')
                    }
                });

            },

相关内容

  • 没有找到相关文章

最新更新