如何将数组从Javascript发送到Laravel服务器?

如何将数组从Javascript发送到Laravel服务器?,javascript,laravel,Javascript,Laravel,我试图通过使用jquery(each)遍历每个表数据并将每个记录推送到一个数组中,来获取表中存在或不存在的学生人数,并将其发送到laravel服务器。我是编程新手。谢谢 这是我的Javascript: $('#submitRollCall').click(function(e){ e.preventDefault(); let data = []; $('input').parents('tr').each(function(){ const roll

我试图通过使用jquery(each)遍历每个表数据并将每个记录推送到一个数组中,来获取表中存在或不存在的学生人数,并将其发送到laravel服务器。我是编程新手。谢谢

这是我的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'”

根据$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]);
}

从逻辑上讲,您的代码似乎很好,您在这里面临的问题是什么?因为
json\u decode
返回一个数组,所以在后面使用对象表示法。您可以使用数组语法:
$rollCall->stdId=$data['stdId']我尝试使用这个$rollCall->stdId=$data['stdId'];它返回未定义的索引“stdId”@Vincent Decaux谢谢@Vincent Decaux。这很有效。但是,如果我可以问一下,为什么我不需要传入“(数组)$data?”,因为您以前定义过模型的属性
save()
只需保存之前定义的模型,它不需要任何参数。您可以使用
RollCall::insert($row)如果你也想要的话。