php - 422 Unprocessable Content Ajax form - Laravel 8

I'm trying to submit a form using ajax with Laravel 8. But I got a 422 Unprocessable Content error.

After several searches I saw that it is a validation error. But I don't understand why.

web.php

Route::post('/eligibility/check', [EligibilitiesController::class, 'getEligibility']);

EligibilitiesController.php

public function getEligibility(Request $request)
{
    $request->validate([
        'username' => 'required',
        'email' => 'required'
    ]);
    $data = $request->all();
    return response()->json(['success'=>'Ajax request submitted successfully']);
}

index.blade.php

<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
</head>
<body>
<form id="ajaxform">
    @csrf
    <input type="hidden" name="username" value="{{ $username }}">
    <input type="hidden" name="email" value="{{ $email }}">
    <button type="submit" class="save-data">Send</button>
</form>
</body>

app.js

$(".save-data").click(function(event){
      event.preventDefault();

      let username = $("input[name=name]").val();
      let email = $("input[name=email]").val();

      $.ajax({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        url: "/eligibility/check",
        type:"POST",
        data:{
          username:username,
          email:email
        },
        success:function(response){
          console.log(response);
          if(response) {
            $('.success').text(response.success);
            $("#ajaxform")[0].reset();
          }
        },
        error: function(error) {
         console.log("error:"+error);
        }
       });
});

Answer

Solution:

Your input field for the username has the name 'username' and in your javascript you access 'name'.

So you have a validation error because no username is given.

Source