如何在Laravel中处理JSON.stringify数据

时间:2017-06-04 02:58:05

标签: jquery ajax laravel-5

我试图从Laravel控制器中的Ajax中捕获数据以保存它。但我不断收到错误,如下图所示。我在这里做错了什么?

Laravel Controller @ ajaxstore

public function ajaxstore(Request $request)
{

    //Event::create($request->all());
    //return (gettype($name));
    $data = $request->all();
    //$newdata =array_keys($data);
    $data= json_decode($data,true);
    $event = New Event;        
    $event->name = $data['name'];
    $event->description = $data['description'];
    $event->start = $data['start'];
    $event->end = $data['end'];
    $event->color = $data['color'];
    $event->save();
}

我的jquery

$('#calendar').fullCalendar({
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
    },
    events: '/admin/event-list/' + roomId.val(),
    //events: JSON.parse(json_events),
    defaultView: 'agendaWeek',
    editable: true,
    selectable: true,
    timezone: 'local',
    select: function(start, end, jsEvent, view) {
        endtime = end.format('LLLL');
        starttime = start.format('LLLL');
        room_id = roomId.val();
        var mywhen = starttime + ' - ' + endtime;
        startTime.val(start);
        endTime.val(end);
        $('#dayClick #when').text(mywhen);
        $("#dayClick").modal("show");
        $('#submitButton').on('click', function(event){
            console.log("clicked");
            if(createEvent.valid()){
                // We don't want this to act as a link so cancel the link action
                if(doSubmit(start, end))
                {

                    $("#dayClick").modal('hide');
                    // remove previous entry
                    $("#createEvent").each(function(){
                        this.reset();
                    });
                    console.log($('#apptStartTime').val());
                    console.log($('#apptEndTime').val());
                    // enter to the calender
                    $("#calendar").fullCalendar('renderEvent',
                        {
                            title: $('#createEvent #event-name').val(),
                            start: new Date($('#apptStartTime').val()),
                            end: new Date($('#apptEndTime').val()),
                        },
                        true);
                    console.log("after renderEvent");

                }
                else
                {
                    console.log("failed");
                };
            }
            event.preventDefault();
        });

        //return eventData;
    },
    eventClick: function(event, jsEvent, view) {
        $('#modalTitle').html(event.name);
        $('#modalBody').html(event.description);
        $('#eventUrl').attr({'href':'event/'+event.id,'target':'_self'});
        $('#fullCalModal').modal("show");
    }
});

function doSubmit(start, end){
    console.log("inside dosubmit");
    eventData.name = eventName.val();
    eventData.description = description.val();
    eventData.capacity = capacity.val();
    eventData.room_id = roomId.val();
    startDate =  moment(start.format("YYYY-MM-DD HH:mm:ss"));
    eventData.start = startDate;
    endDate =  moment(end.format("YYYY-MM-DD HH:mm:ss"));
    eventData.end = endDate;
    eventData.color = color.val();
    console.log("inputdata: " + JSON.stringify(eventData));
    $.ajax({
        type: 'POST',
        url:'/admin/event-ajaxstore',
        //url: '/admin/event-ajaxstore',
        data: JSON.stringify(eventData),
        success: function(response){
            //event.id = response.eventid;
            console.log("returned : " + typeof(response));
            /* $('#calendar').fullCalendar('updateEvent',event); */ 
            /* //json_events = response; */
            /* console.log("data: " + data); */
            return true;
        }
    });


}

enter image description here

当我在控制器中运行时;

    $data = $request->all();
    return (json_decode($data));

我收到以下错误。

  

local.ERROR:ErrorException:json_decode()期望参数1为   string,给出的数组   /Users/sokada/Code/backpack-aktiv/app/Http/Controllers/Admin/EventController.php:39

1 个答案:

答案 0 :(得分:1)

您的问题是$request->all()已经返回一个数组。所以你不需要json_decode()

$data = $request->all();
$data= json_decode($data,true);  // remove this, you don't need it here

请记住,$request->all()将返回所有变量。可能会或可能不是您所期望的

如果是我,我会发送这样的数据:

data: JSON.stringify({eventData:eventData}),

然后我会在我的控制器中访问它:

$data = $request->input('eventData');