Как я могу отправить массив из Javascript на сервер Laravel? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь получить количество учеников, присутствующих или отсутствующих в таблице, и отправляю их на сервер laravel, используя jquery (каждый) для перебора всех данных таблицы и помещая каждую из записей в массив. Я новичок в программировании. Спасибо

Это мой Javascript:

$('#submitRollCall').click(function(e){
    e.preventDefault();
    let data = [];

    $('input').parents('tr').each(function(){

        const rollCallObj = {};

        rollCallObj.stdId = $(this).find('#stdId').val();
        rollCallObj.rollCall = $(this).find("input:checked").val();

        data.push(rollCallObj);
    })
    console.log(data)
    $.ajax({

        type:'POST',
        url: '/rollCall',
        beforeSend: function (xhr, type) {
            if(!type.crossDomain) {
                xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
            }
        },
        data:{
            'data': JSON.stringify(data)
        },
        success:function(data){
            if(data) {
                M.toast({html:'Roll-Call Successfully taken!'});
            } else {
                M.toast({html:'Not Success'});
            }
            console.log(data);
        },error:function(xhr, status, error){
            M.toast({html:"Pls Make sure to check each student"});
        }

    })
});

И мой контроллер:

class RollCallController extends Controller
{
    public function rollCallSave(Request $request)
    {                
            $data = json_decode($request->input('data')) ;

            $rollCall = new RollCall();

            $rollCall->stdId = $data->stdId;

            $rollCall->rollCall = $data->rollCall;

            $rollCall->save((array)$data);

            return response()->json(['data' => $data]);

    }

}

У меня 'dd ($ data)', это дает мне следующее:

array:10 [
  0 => {#206
    +"stdId": "10"
    +"rollCall": "1"
  }
  1 => {#201
    +"stdId": "9"
    +"rollCall": "1"
  }
  2 => {#202
    +"stdId": "8"
    +"rollCall": "1"
  }
  3 => {#208
    +"stdId": "7"
    +"rollCall": "1"
  }
  4 => {#209
    +"stdId": "6"
    +"rollCall": "1"
  }
]

Это ошибка, которую я получаю при попытке отправить:

{message: "Trying to get property 'stdId' of non-object", exception: "ErrorException",…}
exception: "ErrorException"
file: "C:\laravel\school\app\Http\Controllers\RollCallController.php"
line: 20
messag

e: «Попытка получить свойство 'stdId' не-объекта"

1 Ответ

0 голосов
/ 09 октября 2019

Согласно дампу $ data, вам нужно использовать цикл:

public function rollCallSave(Request $request)
{                
        $data = json_decode($request->input('data')) ;

        foreach ($data as $row) {
           $rollCall = new RollCall();
           $rollCall->stdId = $row->stdId;
           $rollCall->rollCall = $row->rollCall;
           // you don't need to pass $data here
           $rollCall->save();
        }

        return response()->json(['data' => $data]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...