dynamic select drop down Laravel 5.3

saya ingin membua dynamic select drop down di laravel 5.3 tetapi gagal,tidak muncul error tetapi ketika category dipilih subcategory nya gak muncul. mohon bantuannya.

ini adalah code dari view saya

{{ Form::open(['url' => 'foo/bar', 'files' => true]) }}
        <input type="hidden" name="_token" value="{{ csrf_token() }}">

        <div class="form-group">
          <label class="sr-only">Categories</label>
          <select class="form-control input-sm" name="category" id="category">
            @foreach( $categories as $data )

            <option value="{{ $data->id }}"> {{ $data->name }}</option>

            @endforeach
          </select>
        </div>

        <div class="form-group">
          <label class="sr-only">Subcategories</label>
          <select class="form-control input-sm" name="subcategory" id="subcategory">
            <option value=""></option>
          </select>
        </div>
{{ Form::close() }}

ini adalah JS saya

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script language="JavaScript" type="text/JavaScript">

    $('#category').on('change', function(e){
      console.log(e);
      var cat_id = e.target.value;

      //ajax

      $.get('/ajax-subcat/' + cat_id, function(data){

        $('#subcategory').empty();

        $.each(data, function(index, subcatObj){
          $('#subcategory').append('<option value="'+subcatObj.id+'">'+subcatObj.name+'</option>');
        });
      });
    });

</script>

ini adalah route saya

Route::get('/', function () {
	$all = new Category;
	$categories = $all->get();
    return view('index', compact('categories'));
});

Route::put('/ajax-subcat/{id}', 'HomeController@ajax');

ini adalah Controller saya dan saya

    public function ajax(Request $request, $id)
    {

        $all = new Subcategory;

        $subcategories = $all->where('category_id', $id)->first();

        return response()->json($subcategories);
    }

ini adalah migration Category

    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

dan ini adalah migration Subcategory

    public function up()
    {
        Schema::create('subcategories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->integer('category_id')->unsigned();
            $table->timestamps();

            $table->foreign('category_id')->references('id')->on('categories');
        });
    }

avatar Galih13
@Galih13

3 Kontribusi 0 Poin

Diperbarui 7 tahun yang lalu

4 Jawaban:

coba route.php ganti put jadi get

Route::get('/ajax-subcat/{id}', 'HomeController@ajax');

dan pada controller

public function ajax(Request $request, $id)
    {
        $all = new Subcategory();

        $subcategories = $all->where('category_id', $id)->get();

        return response()->json($subcategories);
    }

pada controller ->first jadi ->get, karna pada ajax di view menggunakan looping untuk option select, sedangkan jika pada controller ->first() data hanya row [1 row] jika get result array [] (maka bisa di looping)

semoga membantu..

avatar gunalirezqimauludi
@gunalirezqimauludi

350 Kontribusi 243 Poin

Dipost 7 tahun yang lalu

Coba di ganti Ajax seperti ini gan......

<script language="JavaScript" type="text/JavaScript">

    $('#category').on('change', function(e){
      console.log(e);
      var cat_id = e.target.value;

      //ajax

      $.get('/ajax-subcat?cat_id=' + cat_id, function(data){  // Ganti bagian ini......

        $('#subcategory').empty();

        $.each(data, function(index, subcatObj){
          $('#subcategory').append('<option value="'+subcatObj.id+'">'+subcatObj.name+'</option>');
        });
      });
    });

</script>

Route Ganti seperti ini......

Route::get('/ajax-subcat', 'HomeController@ajax'); // Tanpa {id}

Controller Ganti Seperti ini.......

use Illuminate\Support\Facades\Input;
use App\Subcategory; // Sesuaikan dg nama Model Subcategory

public function ajax() // Tanpa (Request $request, $id)
    {

        $cat_id = Input::get('cat_id');

        $subcategories = Subcategory::where('category_id', $cat_id)->get(); // Sesuaikan dg nama Model Subcategory

        return Response::json($subcategories);
    }

Silahkan di coba , semoga bisa teratasi ....

avatar Rismal
@Rismal

131 Kontribusi 105 Poin

Dipost 7 tahun yang lalu

di inspect > console muncul tulisan seperti ini

jquery.min.js:4 GET http://localhost/Percobaan/public/ajax-subcat?cat_id=2 401 (Unauthorized)

maksud nya apa ya ?? mohon bantuannya

avatar Galih13
@Galih13

3 Kontribusi 0 Poin

Dipost 7 tahun yang lalu

Coba cek JQuerynya gan udh ke Load atau blm sekalian sama response dr controllernya, atau kalau Ada TeamViewer, biar saya coba bantu cek

avatar Rismal
@Rismal

131 Kontribusi 105 Poin

Dipost 7 tahun yang lalu

Login untuk ikut Jawaban