Laravel ajax只有第一个按钮执行另一个按钮才会响应

时间:2018-01-21 11:14:29

标签: ajax laravel

我需要你的帮助我卡住,因为当我点击第一个按钮它将执行但另一个按钮它不会执行我使用ajax表格,我使用foreach。如果有人知道如何解决,请告诉我。

这是我目前的观看代码:

<tbody>
                    @foreach($customers as $name => $member)
                     @foreach($member->slice(0,1) as $value)
                     <tr>
                         <td>{{$value->id}}</td>
                         <td>{{$value->MATNR}}</td>
                         <td>{{$value->MAKTX}}</td>
                         <td>
                           <select class="form-control">
                              <option>{{$value->UNIT1}}({{$value->CONV1}})</option>
                              <option>{{$value->UNIT2}}({{$value->CONV2}})</option>
                          </select>
                         </td>
                         <td>

                           <select class="form-control">
                            @foreach($member as $value)
                              <option value="{{$value->CHARG}}">{{$value->CHARG}}</option>
                            @endforeach
                          </select>
                         </td>
                         <td>{{$value->VERME}}</td>
                         <td>
                           <form name="ajaxForm" id="ajaxForm" class="form-horizontal" novalidate="">
                            <input type="text" name="_token" value="{{ csrf_token() }}">
                            <input type="text" name="id" value="{{$value->id}}"> 
                          <button type="button" class="btn btn-primary" id="btnSave" value="add">Save</button>
                         </form>


                         </td>
                    </tr>

                     @endforeach 
                    @endforeach 
                    </tbody>

这是我当前的控制器代码

public function cart() {
    if (Request::isMethod('post')) {
        $id = Request::get('id'); 
            $customers = DB::table('Materials')->select('Materials.MATNR','Materials.MAGRV','Materials.CONV1','Materials.id','Materials.CONV1','Materials.UNIT1','Materials.CONV2','Materials.UNIT2','Materials.MHDHB','Materials.MAKTX','Inventory.CHARG','Inventory.VERME')->join('Inventory',function($join){
                $join->on('Inventory.MATNR','LIKE',DB::raw("CONCAT('%',Materials.MATNR,'%')"));
            })->groupBy('Materials.MATNR','Materials.MAGRV','Materials.CONV1','Materials.id','Materials.CONV1','Materials.UNIT1','Materials.CONV2','Materials.UNIT2','Materials.MHDHB','Materials.MAKTX','Inventory.CHARG','Inventory.VERME')->find($id);

        $cart = ShoppingCart::add($customers->id, $customers->CHARG, 5, 100.00, ['MAKTX' => $customers->MAKTX, 'kg' => $customers->VERME]);

    }   
}

我目前的路线

Route::post('/cart', 'system\request_customer@cart');

Ajax当前代码

 $(document).ready(function(){
   $("#btnSave").click(function (e) { 
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
        }
    })
    e.preventDefault();  
    $.ajax({
        type: 'POST',
        url: 'cart',
        data: $('#ajaxForm').serialize(),
        dataType: 'json',
        success: function (data) {
            console.log(data);

        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
});

});

2 个答案:

答案 0 :(得分:1)

所以这是我的新观点

<form method="POST" class="form-horizontal ajaxForm">
   <input type="hidden" id="token" name="_token" value="{{ csrf_token() }}">
   <input type="hidden" name="id" id="id" value="{{$value->id}}"> 
   <input type="hidden" name="MATNR" value="{{$value->MATNR}}">
   <button>Submit</button>
</form>

和我的新ajax

$(".ajaxForm").submit(function(e) {
e.preventDefault();    
var formData = new FormData(this);
$.ajax({
    url: 'cart',
    type: 'POST',
    data: formData,
    success: function (data) {
        console.log(data)
    },
    cache: false,
    contentType: false,
    processData: false
});
});

答案 1 :(得分:0)

我遇到了同样的问题。我用id替换class解决了这个问题。我不知道为什么这是一个解决方案,但它适用于我的情况。为了方便您,您需要做的就是这些。试试吧,据我说,它必须有效!

  1. 将每个#ajaxForm替换为.ajaxForm
  2. <form name="ajaxForm" id="ajaxForm" class="form-horizontal" novalidate="">替换为<form name="ajaxForm" class="form-horizontal ajaxForm" novalidate="">
  3. 让我知道它是否有效。它适用于我的情况。就我而言,我遇到了同样的错误。我的意思是,只有第一个按钮或提交按钮有效。

    如果您是JQuery专家或了解其背后的原因,请告诉我们!