如何将数据从下拉列表传递到我的控制器

时间:2019-04-25 12:51:34

标签: laravel

我目前正在处理一个数据表,其中每个项目都有一个下拉菜单,您可以通过该菜单选择用于更改数据库中项目状态的选项。 我使用一个提交按钮触发该功能,该按钮显示数据库中该项目的当前状态(已标记或未标记)。 我的问题是无法将数据(下拉列表中的值)传递到控制器。即使尝试使用dd($request->all())打印请求,也无法显示任何内容。

路线

Route::any('/mark_as_important/{id}', 'ServiceController@markAsImportant')->middleware('all_customer');

控制器

public function markAsImportant(Request $request, $id){
    try{
        dd($request);
        DB::table('tubes')->where('TubeID',$id)->update(['LOG_important'=>1]);
        return 'true';
    }catch(\Exception $e){
        return 'false';
    }
}

查看

        <button type='submit' id="button_{{$row['TubeID']}}" onclick="markAsImportant({{$row['TubeID']}})"
        @if ($row['LOG_important'] == 1)
        disabled>Marked Important</button>
        @elseif ($row['LOG_important'] == 2)
        disabled>Marked RnD</button>
        @else
        >Mark as</button>
        <select name="flags" class="form-control" data-id='flag_field'>
          @php
          $sql = DB::table('flags')->select('id', 'Flag_Name')->get();
          @endphp
          @foreach ($sql as $row)
          <option value='{{$row->id}}'>{{$row->Flag_Name}}</option>;
          @endforeach
        </select>
<script type="text/javascript">

  function markAsImportant(id) {
    $("#button_" + id).attr('disabled', 'true');
    var flag_id = $(this).data("id")

    $.get("/mark_as_important/" + id, function(success) {
      if (success == 'true') {
        $("#button_" + id).html('Marked');
      // } else {
      //   alert('Something went wrong');
      }
    });
  }

2 个答案:

答案 0 :(得分:2)

要将jquery用于click事件并更改$('#button_' + id).html(),您可以尝试类似的操作

$(`#button_${id}`).on('click', function() { 
  $(this).prop('disabled', true);
  var flagId = $('.form-control').data('id');

  console.log({ flagId: flagId, buttonDisabled: $(this).prop('disabled') }) 
  // make sure something is actually coming through with the console.log()

  $.ajax({
   url: `/mark_as_important/${id}`,
   type: 'GET',
   dataType: 'json', // assuming its json
   success: function(result) {
     $(`#button_${id}`).html('Marked');
   },
   error: function(err) {
     console.log(err);
   }
  })
});

答案 1 :(得分:1)

您正在向任何路线发出获取请求,该ID包含在网址中,因此您可以像这样抓取它:

$tubeId = request()->route('id');

但是我将路由定义为获取路由,并使用route parameters

获取数据