nionta's avatar

422 in update method

this is my index.balde.php code:

               $('#action1').click(function (){
               var Ids = new Array();
               var Names = new Array();
               var Status = new Array();
               if($(".selected").length){
                $(".selected").each(function(){
                  Ids.push($(this).children(".id").html());
                  Names.push($(this).children(".company_name").html());
                  Status.push($(this).children(".status").html());
                });
                $.ajax({
                  url: 'update',
                  method:'POST',
                  dataType: 'json',
                  "id":Ids,
                  "company_name":Names,
                  "status":Status,
                  success: function(data){
                    $('#form1').html(data.success);
                  },
                  error: function(data)
                  {
                    console.log(data);
                  }
                  });
                // alert(Ids);
                // alert(Names);
                // alert(Status);

               }else{
                alert("No row is selected.");
               }
            });

and this is my ajaxcontroller.php

 public function update(Request $request)
 {
    $ids = $request->input('Ids');
    $success_output = '';
      $companies = companies::find($ids);
      companies::where('id',$ids);
      $this->validate($request,
        ['company_name' => 'required',
            'status' => 'required',
        ]);
      $companies->company_name = $request->Names;
      $companies->status = $request->Status;
      $companies->save();
      $success_output = '<div class="alert alert-success">Data Inserted</div>';

        $output = array(
                'errror' => $error_array,
                'success' => $success_output
            );
            echo json_encode($output);
      return redirect('/companies')->with('success','updated');
}

I want to update multiple row at a time. but its not working. I couldn't figure out exactly where is the mistake, is it in the controller file? can anyone help me?

0 likes
10 replies
Sergiu17's avatar

First I'd add some console logs to see what data I send. Second, dd($request->all());

Third, while this is AJAX request, why do you use return redirect() ?

Cronix's avatar

You're not actually sending any data in your ajax request, so your validation is failing (422 error code). Data needs to be in a data property. Check the jQuery docs for ajax.

data: {
    key: value,
    key: value,
    // etc
}

And yes, your redirect in the controller isn't going to do anything. This is an ajax request.

1 like
nionta's avatar

I have done this also, but same 422 problem

 $('#action1').click(function (){
               var Ids = new Array();
               var Names = new Array();
               var Status = new Array();
               if($(".selected").length){
                $(".selected").each(function(){
                  Ids.push($(this).children(".id").html());
                  Names.push($(this).children(".company_name").html());
                  Status.push($(this).children(".status").html());
                });
                var data = { id: Ids, company_name: Names, status: Status };
                console.log(data);
                $.ajax({
                  url: 'update',
                  method:'POST',
                  data:JSON.stringify(data),
                  success: function(data){
                    $('#form1').html(data.success);
                  },
                  error: function(data)
                  {
                    // alert(data);
                    // console.log(data);
                    // $('#form1').html(data.success);
                  }
                  });
     }else{
                alert("No row is selected.");
               }
            });
Tray2's avatar

Shouldn't this row

 $ids = $request->input('Ids');

be

 $ids = $request->input('ids');

since you have this in you javascript

 $.ajax({
                  url: 'update',
                  method:'POST',
                  dataType: 'json',
                  "id":Ids,
                  "company_name":Names,
                  "status":Status,
ChrisSFR's avatar

@Tray2 meant

$ids = $request->input('id');

You are posting your ids with "id", but access it with

$request->input('Ids');

in your controller.

1 like
nionta's avatar

have done this also, but not working, same 422 error, means "data is invalid".

Tray2's avatar

That means your validation is failing.

$this->validate($request,
        ['company_name' => 'required',
            'status' => 'required',
        ]);

I'm guessing one ot both of these are not passed along into the request from your ajax.

nionta's avatar

yeap; but can you tell me the solution?

Please or to participate in this conversation.