如何发送数组到控制器使用ajax?

时间:2019-06-22 14:03:19

标签: jquery laravel

我有一个带复选框的数据表,以及一个允许通过数组填充表ITEMS []的验证按钮,我想将此数组通过ajax发送到我的控制器。请帮忙。

这是我的数据表

 <div id='form2'>
    <h3>form group 2</h3>
    <h4>DATE : <span id="dateE"></span></h4>
    <h4>chantier : <span id="ch"></span></h4>
    <div class="form-group col-md-offset-5 ">
        <button class="btn btn-success add-all" type="submit" id="hide">Pointage</button>
    </div>
    <table class="table table-bordered" id="mytable">
        <tr>
            <th>Archive</th>
            <th><input type="checkbox" id="check_all"></th>
            <th>S.No.</th>
            <th>matricule</th>
            <th>nom & prenom</th>
            <th>salaire net</th>
            <th>nbre de jour </th>
            <th>prime</th>
        </tr>
        @if($salaries->count())
            @foreach($salaries as $key => $salarie)
                <tr id="tr_{{$salarie->id}}">
                    <td>archive</td>
                    <td><input type="checkbox" class="checkbox" data-id="{{$salarie->id}}"></td>
                    <td>{{ ++$key }}</td>
                    <td>{{ $salarie->matricule }}</td>
                    <td >{{ $salarie->nom }} {{ $salarie->prenom }}</td>
                    <td>
                        <input type="hidden" name="salaire" value="{{ $salarie->salairenet }}">
                        {{ $salarie->salairenet }}
                    </td>
                    <td ><input type="text" class='input2' name="nbreJ" class="form-control" ></td>
                    <td><input type="text" name="prime" class="form-control" value="0"></td>
                </tr>
            @endforeach
        @endif
    </table>
 </div>

这是我的代码jquery:

$('.add-all').on('click', function() {
    var items = [];
    let valu = $('#datePicker').val();
    $("tr").each(function(i,r) {
        if ( i > 0 && $(r).find("input").first().prop("checked")) {  

            items.push({"matricule": r.cells[3].innerText, "salaire": r.cells[5].innerText, "date" : valu })
        }
    });

    //ajax
    $.ajax({ 
        method      : 'POST', 
        url       : 'mois', 
        data      : items, 
        success   : function(data) {
            if (!data.success) {
                if (data.errors.name) { 
                    $('.throw_error').fadeIn(1000).html(data.errors.name); 
                }
            } else {
                $('#success').fadeIn(1000).append('<p>' + data.posted + '</p>'); 
            }
        }
    });
});

路线:

Route::post('mois', 'SalarieController@addMultiple');

控制器:

public function addMultiple(Request $request)
{
    dd($request->all());
}

2 个答案:

答案 0 :(得分:1)

尝试此操作,您忘记传递令牌和json密钥

$.ajax({ 
        method      : 'POST', 
        url       : 'mois', 
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        data      : {"items":items}, // pass in json format 
        success   : function(data) {
            console.log(data);
        },
        error : function(err){
            console.log(err)
        }
    });
 //fin ajax 
  }); 

在您的控制器中

public function addMultiple(Request $request){
    return response()->json([
            'status'=>200,
            'message' => "success",
            'data' => $request->all()
    ]);
}

答案 1 :(得分:0)

(我没有足够的代表将此评论发表)

  1. 您是否收到控制器的任何答复?
  2. 尝试将'/ mois'用作ajax网址(带有斜线)
  3. 您是否设置了jQuery Ajax以使用CSRF令牌? https://laravel.com/docs/5.8/csrf#csrf-x-csrf-token

  4. Laravel带有Axios(它非常出色,并且已经配置为使用CSRF令牌)来进行HTTP请求,您是否尝试过使用它?

Axios请求看起来像这样;

axois.post('/mios', items)
.then((response) => {
  console.log(response)
})
.catch((error) => {
  console.log(error)
})